awk部分string匹配(如果列/字部分匹配)
我的虚拟文件看起来像这样:
C1 C2 C3 1 a snow 2 b snowman snow c sowman
如果有$ 3的stringsnow
,我想得到线路。 我可以这样做:
awk '($3=="snow" || $3=="snowman") {print}' dummy_file
但应该有更简单的方法。
awk '$3 ~ /snow/ { print }' dummy_file
也可以通过使用index()函数查找子string:
awk '(index($3, "snow") != 0) {print}' dummy_file
只打印第三个字段为snow
或snowman
:
awk '$3~/^snow(man)?$/' file
GNU sed
sed '/\s*\(\S\+\s\+\)\{2\}\bsnow\(man\)\?\b/!d' file
input:
C1 C2 C3 1雪 2 B雪人 雪c索曼 雪雪人
..output:
1雪 2 B雪人