模式匹配,示例文件还用上一篇的那个
[quote]$ cat file2
First Name, Last Name, age
Barack,Obama,50
字段1,字段2,44
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
找出含有Obama的行并打印
[quote]awk '$0 ~ /Obama/{print}' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
~是模式匹配的操作符,要匹配的模式用//包起来,默认是对整行,也就是$0做匹配,默认的操作就是打印,所以这个命令可以简写为
[quote]awk '/Obama/' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
现在我只想精确的匹配姓Obama的,而不想找出Obamani这个干扰项,那可以用两个==做精确匹配
[quote]awk -F, '$2=="Obama"' file2
Barack,Obama,50
Michelle,Obama,50[/quote]
精确匹配的时候,如果是字符串,字符串要用双引号包起来,如果是数字,可以包也可以不包。
也就是说下面这两个操作是等效的
[quote]awk -F, '$3=="50"' file2
awk -F, '$3==50' file2[/quote]
模式就是正则表达式可以写的复杂一些,比如用|来连接多个条件,用^和$指定开头结尾。还可以用!~来表示不匹配后面的模式。对于值为数字的列,还可以用>,>=,<,<=等比较符。模式操作还可以有多个,用&&和||表示与和或。比如下面这样
[quote]awk -F, '$2~/Obama/ && $3>=50' file2
Barack,Obama,50
Michelle,Obama,50[/quote]
[quote]$ cat file2
First Name, Last Name, age
Barack,Obama,50
字段1,字段2,44
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
找出含有Obama的行并打印
[quote]awk '$0 ~ /Obama/{print}' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
~是模式匹配的操作符,要匹配的模式用//包起来,默认是对整行,也就是$0做匹配,默认的操作就是打印,所以这个命令可以简写为
[quote]awk '/Obama/' file2
Barack,Obama,50
Michelle,Obama,50
Nonsense,Obamani,11[/quote]
现在我只想精确的匹配姓Obama的,而不想找出Obamani这个干扰项,那可以用两个==做精确匹配
[quote]awk -F, '$2=="Obama"' file2
Barack,Obama,50
Michelle,Obama,50[/quote]
精确匹配的时候,如果是字符串,字符串要用双引号包起来,如果是数字,可以包也可以不包。
也就是说下面这两个操作是等效的
[quote]awk -F, '$3=="50"' file2
awk -F, '$3==50' file2[/quote]
模式就是正则表达式可以写的复杂一些,比如用|来连接多个条件,用^和$指定开头结尾。还可以用!~来表示不匹配后面的模式。对于值为数字的列,还可以用>,>=,<,<=等比较符。模式操作还可以有多个,用&&和||表示与和或。比如下面这样
[quote]awk -F, '$2~/Obama/ && $3>=50' file2
Barack,Obama,50
Michelle,Obama,50[/quote]