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-PPerl正規表現の場合):

grep -P '\s200\s' file

純粋でなければならない場合bash

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

空白、タブなどがあるかどうかわからない場合(上記と解決策[[:space:]]に似ています):\ssedgrep

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

答え3

私はこれが役に立つと思います。これにより、パターンを含む行のみが印刷されます。あなたの場合、モードは200です。

grep '200' file-name

関連情報