我有这个文件
a deiauk Biking US 200 G
b kespaul 202 A
c deiauk NY 222 5 Z
我想使用 来匹配确切的字符串 200 awk
。所以我的结果应该是
a deiauk Biking US 200 G
这是我的代码
awk -F ' ' '{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}' file.txt
但在那之后我得到了所有的台词。
答案1
既然你想要精确匹配,为什么不使用 呢==
?
$ cat >file
a deiauk Biking US 200 G
b kespaul 202 A
c deiauk NY 222 5 Z
a auie auie 200 B
b nrst nrst 200 C
$ awk '$(NF-1)==200{a[$1]++}END{for (v in a){print v,a[v]}}' file
a 2
b 1
您还可以通过以下方式限制您的比赛/^200$/
:
$ awk '$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}' file
a 2
b 1
编辑:
我尝试了你的命令,它应该有效。你确定你的吗-F ' '
?
答案2
与awk
,只需:
awk '$0~/ 200 /' file
或者sed
(\s
匹配任何空格):
sed -n '/\s200\s/p' file
解决grep
方案(-P
对于 perl 正则表达式):
grep -P '\s200\s' file
如果它必须是纯净的bash
:
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file
如果您不确定是否有空格、制表符等([[:space:]]
类似于上面的和解决方案\s
中的):sed
grep
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file
答案3
我认为这会有所帮助。这将仅打印包含模式的行。在你的情况下模式是 200
grep '200' file-name