このファイルがあります
a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z
そして私はawk
を使用して正確な文字列200に一致させたい。したがって、私の結果は次のようになります
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
すべての行を取得しました。
コメント
回答
完全一致が必要なため、==
を使用しませんか?
$ 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 " "
を確認しますか?
Comm ents
- はい
-F ' '
は私の状況では問題ありません。 '理由はわかりませんが、同じ問題が発生します
回答
awk
の場合、次のようになります:
awk "$0~/ 200 /" file
またはsed
(\s
は任意の空白に一致します):
sed -n "/\s200\s/p" file
A grep
ソリューション(perl正規表現の場合は-P
):
grep -P "\s200\s" file
純粋である必要がある場合bash
:
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file
スペースやタブなどがあるかどうかわからない場合([[:space:]]
は、上記のsed
およびgrep
ソリューションの\s
に似ています。 ):
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file
コメント
-
grep
-P
がなくても機能し、grep '\s200\s' file
回答
私はこれだと思いますsが役立ちます。これにより、パターンを含む行のみが印刷されます。あなたの場合のパターンは200です
grep "200" file-name
awk
コードで1行ですか?これが何をするのかわざわざ理解しましたか?