100

我的虚拟文件如下所示:

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

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

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

但应该有更简单的方法。

4

5 回答 5

188
awk '$3 ~ /snow/ { print }' dummy_file 
于 2013-06-08T17:11:29.273 回答
50

也可以通过使用 index() 函数查找子字符串:

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

较短的版本:

awk 'index($3, "snow")' dummy_file
于 2014-08-13T17:18:24.043 回答
10

也许这会有所帮助

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

awk '$3 ~ /snow|snowman/' dummy_file
于 2013-06-08T17:09:17.993 回答
8

打印第三个字段是一个snowsnowman唯一的行:

awk '$3~/^snow(man)?$/' file
于 2013-06-08T17:59:31.997 回答
2

GNU sed

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

输入:

C1 C2 C3    
1 一场雪   
2 b 雪人
雪 c 母猪
      雪雪雪人

..输出:

1 一场雪
2 b 雪人
于 2013-06-08T18:34:02.380 回答