我有一个带有下一行的文件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
字符串可以放在文件的任何列中。
答案 0 :(得分:0)
试试这个(仅测试第1列):
awk '$1 == "2010TJ" {print $0}' test.txt
或grep like(所有列):
gawk '/\<2010TJ\>/ {print $0}' test.txt
\< \> is word boundarys
答案 1 :(得分:0)
有几个选择:
使用gawk
字边界(不是POSIX awk ...):
$ gawk '/\<2010TJ\>/' file
实际的空格或制表符或分隔列的内容:
$ awk '/^2010TJ /' file
或直接将字段与字符串进行比较:
$ awk '$1=="2010TJ"' file
如果您愿意,可以遍历字段以测试每个字段:
$ 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'
注意第一个与第二个和第三个略有不同。第一个是2010TJ
中任意位置的独立字符串$0
;第二个和第三个是以该字符串开头的字符串。
答案 2 :(得分:0)
另一个带有字边界的awk
awk '/\y2010TJ\y/' file
note \y
匹配单词的开头或结尾。