awk:匹配行中的精确字符串

awk:匹配行中的精确字符串

我有这个文件

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中的):sedgrep

while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file

答案3

我认为这会有所帮助。这将仅打印包含模式的行。在你的情况下模式是 200

grep '200' file-name

相关内容