全部博文(22)
2013年(22)
分类: 系统运维
2013-05-24 11:28:02
awk的匹配(实例)
找出日志文件中包含a或者b,但不包含c的,然后以;为分隔,第五段的数值的和。
分成两步吧,
第一步是解决匹配的问题
常规是使用grep
egrep 'a|b' /tmp/test |grep -v c
其实awk可以很漂亮的解决
awk -F, '(/a/ || /b/) && !/c/ ' /tmp/test
-F,表示以,作为分隔符
/a/表示匹配a
!/c/表示不匹配c的
第二步就是将第五段的数值累加
awk -F, '(/a/ || /b/) && !/c/ {sum+=$5}END{print sum}' /tmp/test
由此看出awk的匹配其实很强大:
匹配第2行到第4行
awk 'NR>=2 && NR<= 4' /tmp/test
或
awk 'NR==2,NR==4' /tmp/test
匹配第2列等于3的行
awk '$2==3' /tmp/test
匹配第3列中以tan开头的行
awk '$3~/^tan/' /tmp/test
匹配每行长度大于40的行
awk 'length($0)>40' /tmp/test
匹配从a开头,到b开头的行
awk '/^a/,/^b/' /tmp/test