awk中的精确字符串匹配
我有一个文件test.txt和下面几行awk中的精确字符串匹配,awk,gawk,Awk,Gawk,我有一个文件test.txt和下面几行 1997 100 500 2010TJ 2010TJXML 16 20 59 我使用下一行awk仅获取关于字符串2010TJ的信息 awk -v var="2010TJ" '$0 ~ var {print $0}' test.txt 但是代码会打印这两行。我想知道如何获得包含确切字符串的行 1997 100 500 2010TJ 字符串可以放在文件的任何列中。尝试此操作(仅用于测试第1列):
1997 100 500 2010TJ
2010TJXML 16 20 59
我使用下一行awk仅获取关于字符串2010TJ的信息
awk -v var="2010TJ" '$0 ~ var {print $0}' test.txt
但是代码会打印这两行。我想知道如何获得包含确切字符串的行
1997 100 500 2010TJ
字符串可以放在文件的任何列中。尝试此操作(仅用于测试第1列):
或类似grep(所有列):
gawk'/\/{print$0}'test.txt
注
\<\>是单词边界
试试这个(仅用于测试第1列):
或类似grep(所有列):
gawk'/\/{print$0}'test.txt
注
\<\>是单词边界
几个选项:
使用gawk
单词边界(非POSIX awk…):
或直接将字段与字符串进行比较:
$ awk '$1=="2010TJ"' file
如果愿意,可以在字段上循环以测试每个字段:
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
$awk'{for(i=1;i多个选项:
使用gawk
单词边界(非POSIX awk…):
或直接将字段与字符串进行比较:
$ awk '$1=="2010TJ"' file
如果愿意,可以在字段上循环以测试每个字段:
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
$awk'{for(i=1;i另一个awk
带单词边界
awk '/\y2010TJ\y/' file
注意\y
匹配单词的开头或结尾。另一个awk
与单词边界匹配
awk '/\y2010TJ\y/' file
注\y
匹配单词的开头或结尾。如果字符串不在第一个字段2010TJ 100 500 200 2010TJXML 16 20 59如果字符串不在第一个字段2010TJ 100 500 200 2010TJXML 16 20 59
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
$ gawk -v s=2010TJ '$0~"\\<" s "\\>"'
$ awk -v s=2010TJ '$0~"^" s " "'
$ awk -v s=2010TJ '$1==s'
awk '/\y2010TJ\y/' file