Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk部分字符串匹配(如果列/字部分匹配)_Awk - Fatal编程技术网

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

awk部分字符串匹配(如果列/字部分匹配),awk,Awk,我的虚拟文件如下所示: C1 C2 C3 1 a snow 2 b snowman snow c sowman 如果$3中有字符串snow,我想得到这行代码。我可以这样做: awk '($3=="snow" || $3=="snowman") {print}' dummy_file 但是应该有更简单的方法。也许这会有帮助 仅打印第三个字段为snow或snowman的行: awk '$3~/^snow(man)?$/

我的虚拟文件如下所示:

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman
如果$3中有字符串
snow
,我想得到这行代码。我可以这样做:

awk '($3=="snow" || $3=="snowman") {print}' dummy_file
但是应该有更简单的方法。

也许这会有帮助


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

awk '$3~/^snow(man)?$/' file
逗号分隔符 输入:

C1 C2 C3 1 a snow 2 b snowman snow c sowman snow snow snowmanx C1 C2 C3 一场雪 2b雪人 斯诺·c·索曼 雪人 …输出:

1 a snow 2 b snowman 一场雪 2b雪人
也可以使用index()函数查找子字符串:

awk '(index($3, "snow") != 0) {print}' dummy_file
较短版本:

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

严格地说,不需要打印:
“$3~/snow/”
足够了,只要该链接已经失效:以下是当前使用的链接!例如,awk'3美元~/foo/'如何打印匹配字符串的行号。我的意思是,假设/String/位于第80行,我想得到行号。谢谢。{print NR,$0}将打印“记录/行号”和匹配的整行。注意,假设您只向awk传递了一个文件名。如果将文件列表作为参数提供给awk命令,则需要确保使用的是GNU awk,并将NR更改为FNR以获得正确的行号。对于一个非常直截了当的问题,这可能是一个更复杂的答案。此外,对整个单词使用
sed
,风险很大。尽管从技术上讲是可能的,但为了让它可靠地工作,我必须使用“向后看”、“向前看”以及“代码”结构。这对胆小的人没什么好处,这是肯定的。这比Ahmed Masud的答案要好,因为它将“snow”作为一个文本字符串处理,而不是正则表达式。你可以编写得更简单:
awk'index($3,“snow”)'dummy_file
我同意这比我的答案更好。 1 a snow 2 b snowman
awk '(index($3, "snow") != 0) {print}' dummy_file
awk 'index($3, "snow")' dummy_file