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