awk部分字符串匹配(如果列/字部分匹配)

时间:2013-06-08 17:05:27

标签: awk

我的虚拟文件如下所示:

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman

如果$ 3中有字符snow,我想获取行。我可以这样做:

awk '($3=="snow" || $3=="snowman") {print}' dummy_file

但应该有更简单的方法。

5 个答案:

答案 0 :(得分:116)

awk '$3 ~ /snow/ { print }' dummy_file 

答案 1 :(得分:31)

也可以通过查找带有index()函数的子串:

awk '(index($3, "snow") != 0) {print}' dummy_file

更短的版本:

awk 'index($3, "snow")' dummy_file

答案 2 :(得分:7)

也许这会有所帮助

http://www.math.utah.edu/docs/info/gawk_5.html

awk '$3 ~ /snow|snowman/' dummy_file

答案 3 :(得分:5)

打印第三个字段仅为snowsnowman的行:

awk '$3~/^snow(man)?$/' file

答案 4 :(得分:3)

GNU sed

sed '/\s*\(\S\+\s\+\)\{2\}\bsnow\(man\)\?\b/!d' file

输入:

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman
      snow     snow     snowmanx

..输出:

1     a     snow
2     b     snowman