awk中的精确字符串匹配
Exact string match in awk
我有一个文件test.txt,其中包含下一行
1997 100 500 2010TJ
2010TJXML 16 20 59
我正在使用下一个 awk 行来获取有关字符串 2010TJ 的信息
awk -v var="2010TJ" '[=11=] ~ var {print [=11=]}' test.txt
但是代码打印了这两行。我想知道如何获取包含确切字符串的行
1997 100 500 2010TJ
字符串可以放在文件的任何列中。
试试这个(仅用于测试第 1 列):
awk ' == "2010TJ" {print [=10=]}' test.txt
或 grep like(所有列):
gawk '/\<2010TJ\>/ {print [=11=]}' test.txt
备注
\< \> is word boundarys
多个选项:
使用 gawk
字边界(不是 POSIX awk...):
$ gawk '/\<2010TJ\>/' file
实际的 space 或制表符或分隔列的内容:
$ awk '/^2010TJ /' file
或者直接将字段与字符串进行比较:
$ awk '=="2010TJ"' file
如果您愿意,可以遍历字段以测试每个字段:
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
或者,给定您设置变量的示例,同样使用变量:
$ gawk -v s=2010TJ '[=14=]~"\<" s "\>"'
$ awk -v s=2010TJ '[=14=]~"^" s " "'
$ awk -v s=2010TJ '==s'
请注意,第一个与第二个和第三个略有不同。第一个是 [=17=]
中任意位置的独立字符串 2010TJ
;第二个和第三个是以该字符串开头的字符串。
另一个 awk
有单词边界
awk '/\y2010TJ\y/' file
注意 \y
匹配单词的开头或结尾。
我有一个文件test.txt,其中包含下一行
1997 100 500 2010TJ
2010TJXML 16 20 59
我正在使用下一个 awk 行来获取有关字符串 2010TJ 的信息
awk -v var="2010TJ" '[=11=] ~ var {print [=11=]}' test.txt
但是代码打印了这两行。我想知道如何获取包含确切字符串的行
1997 100 500 2010TJ
字符串可以放在文件的任何列中。
试试这个(仅用于测试第 1 列):
awk ' == "2010TJ" {print [=10=]}' test.txt
或 grep like(所有列):
gawk '/\<2010TJ\>/ {print [=11=]}' test.txt
备注
\< \> is word boundarys
多个选项:
使用 gawk
字边界(不是 POSIX awk...):
$ gawk '/\<2010TJ\>/' file
实际的 space 或制表符或分隔列的内容:
$ awk '/^2010TJ /' file
或者直接将字段与字符串进行比较:
$ awk '=="2010TJ"' file
如果您愿意,可以遍历字段以测试每个字段:
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
或者,给定您设置变量的示例,同样使用变量:
$ gawk -v s=2010TJ '[=14=]~"\<" s "\>"'
$ awk -v s=2010TJ '[=14=]~"^" s " "'
$ awk -v s=2010TJ '==s'
请注意,第一个与第二个和第三个略有不同。第一个是 [=17=]
中任意位置的独立字符串 2010TJ
;第二个和第三个是以该字符串开头的字符串。
另一个 awk
有单词边界
awk '/\y2010TJ\y/' file
注意 \y
匹配单词的开头或结尾。