`
swordinhand
  • 浏览: 308847 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

AWK入门2

阅读更多
模式匹配,示例文件还用上一篇的那个
引用
$ cat file2
First Name, Last Name, age
Barack,Obama,50
字段1,字段2,44
Michelle,Obama,50
Nonsense,Obamani,11

找出含有Obama的行并打印
引用
awk '$0 ~ /Obama/{print}' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11

~是模式匹配的操作符,要匹配的模式用//包起来,默认是对整行,也就是$0做匹配,默认的操作就是打印,所以这个命令可以简写为
引用
awk '/Obama/' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11

现在我只想精确的匹配姓Obama的,而不想找出Obamani这个干扰项,那可以用两个==做精确匹配
引用
awk -F, '$2=="Obama"' file2
Barack,Obama,50
Michelle,Obama,50

精确匹配的时候,如果是字符串,字符串要用双引号包起来,如果是数字,可以包也可以不包。
也就是说下面这两个操作是等效的
引用
awk -F, '$3=="50"' file2
awk -F, '$3==50' file2

模式就是正则表达式可以写的复杂一些,比如用|来连接多个条件,用^和$指定开头结尾。还可以用!~来表示不匹配后面的模式。对于值为数字的列,还可以用>,>=,<,<=等比较符。模式操作还可以有多个,用&&和||表示与和或。比如下面这样
引用
awk -F, '$2~/Obama/ && $3>=50' file2
Barack,Obama,50
Michelle,Obama,50


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics