我有一个包含以下几行的文件 test.txt
1997 100 500 2010TJ
2010TJXML 16 20 59
Run Code Online (Sandbox Code Playgroud)
我使用下一个 awk 行仅获取有关字符串 2010TJ 的信息
awk -v var="2010TJ" '$0 ~ var {print $0}' test.txt
Run Code Online (Sandbox Code Playgroud)
但代码打印了两行。我想知道如何获取包含确切字符串的行
1997 100 500 2010TJ
Run Code Online (Sandbox Code Playgroud)
该字符串可以放置在文件的任何列中。
几种选择:
使用gawk字边界(不是 POSIX awk...):
$ gawk '/\<2010TJ\>/' file
Run Code Online (Sandbox Code Playgroud)
实际的空格或制表符或分隔列的内容:
$ awk '/^2010TJ /' file
Run Code Online (Sandbox Code Playgroud)
或者直接将字段与字符串进行比较:
$ awk '$1=="2010TJ"' file
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以循环遍历字段来测试每个字段:
$ awk '{for (i=1;i<=NF;i++) if ($i=="2010TJ") {print; next}}' file
Run Code Online (Sandbox Code Playgroud)
或者,给出设置变量的示例,使用变量相同:
$ gawk -v s=2010TJ '$0~"\\<" s "\\>"'
$ awk -v s=2010TJ '$0~"^" s " "'
$ awk -v s=2010TJ '$1==s'
Run Code Online (Sandbox Code Playgroud)
请注意,第一个与第二个和第三个略有不同。第一个是;2010TJ中任意位置的独立字符串。$0第二个和第三个是以该字符串开头的字符串。