このファイルがあります。
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