範囲内の値を満たす行を数えるシェルスクリプト

範囲内の値を満たす行を数えるシェルスクリプト

私はこれを持っています:

 S=`cat sales.txt`;
    echo "$S" | cut -d: -f5 | grep -E '[0-9][0-9][0-9]' | wc -l

私のテキストファイル:名前:ID:番号:タイプ:値

Tom:8:987654:A:67           //1
Dick:9:7651:B:83            //2
Harry:5:21215121:A:92       //3
Molly:2:1231872231:A:44     //4
Megan:123:322:B:145         //5
Russia:8:99231272:B:530     //6
Boleh:123:29321831:C:5000   //7

5 列目の値が 0 ~ 999 の範囲にある行の数を数えようとしています。

実行しようとすると、 6 とカウントされるべきところ、 3 とカウントされます。

答え1

2桁の数字が正規表現と一致しません[0-9][0-9][0-9]

また、ファイルを変数に保存して印刷することechoは、本当に悪い考えだ。なぜ printf は echo よりも優れているのでしょうか?ですが、さらに重要なのは、コマンドcat fileの代わりに を実行することですecho

実際には、すべてを Awk で実行でき、 も必要ありませんcat。負の数値が表示されないので、「1000 未満」のチェックだけを行います。

awk -F: '$5 < 1000 {a++} END {print a}' sales.txt

関連情報