Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46368
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-24 10:51
文章存档

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

阅读(330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~