awk中的精确字符串匹配

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列):

我有一个文件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列):

或类似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