0

ログファイルと次のコマンドがあります

grep '"REFERENCE":"78","STATUS":"Buffered"' file.log | wc -l
grep '"REFERENCE":"78","STATUS":"Delivered"' file.log | wc -l
grep '"REFERENCE":"78","STATUS":"Not Delivered"' file.log | wc -l

ワンライナーを使用して次のような出力を得る方法はありますか?

Buffered: 30
Delivered: 1200
Not Delivered: 589

出力はまったく同じである必要はありません。

4

3 に答える 3

1

ここから借りた、私の問題の解決策を見つけるだけです

grep -oP '"REFERENCE":"79","STATUS":".*?"' file.log | sort | uniq -c

出力例:

15605 "REFERENCE":"79","STATUS":"Buffered"
24280 "REFERENCE":"79","STATUS":"Delivered"
10224 "REFERENCE":"79","STATUS":"Not Delivered"
于 2012-09-18T17:19:31.887 に答える
0

確かに、行数を数える代わりに、grep の -c スイッチを検討してください。見つかった一致の数と、bash の $() または SINGLEEQUOTEcommandSINGLEEQUOTE 構文を返し、それを bash の単純な算術演算 $(($X+$Y)) と組み合わせて 1 つのコマンドにします。同様に:

OUTCOUNT=$((`grep -c aaa file1.txt` + `grep -c bbb file2.txt` + `grep -c ccc file3.txt`))
于 2012-09-18T17:05:03.227 に答える
0

を使用awkして目的の行を抽出し、ステータスのみを出力してから、 と を使用sortuniqて、一意のステータスごとにカウントを取得します。

awk -F, '/"REFERENCE":"78"/ { print $2 }' | sort | uniq -c

入力行の正確な形式に応じて、この回答を調整する必要がある場合があります。今のところ、カンマ区切りの行の 2 番目のフィールドは"STATUS":"<status>".

于 2012-09-18T17:20:49.440 に答える