範囲値に一致する行数を計算するシェルスクリプト

範囲値に一致する行数を計算するシェルスクリプト

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

 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

関連情報