検索行と検索文字列の発生回数を表示するにはどうすればよいですか?

検索行と検索文字列の発生回数を表示するにはどうすればよいですか?

特定の文字列に基づいてコンソールにすべての結果と数を表示するスクリプトを作成しています。

例: 「ERROR」という文字列を検索して、次のような結果が得られたとします。ここで、ERROR 発生回数は 5 です。

2013-12-08 13:43:07 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-01-08 13:43:06 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-02-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)
2014-03-08 13:43:03 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-04-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)

ログと発生回数(行)を表示したいです。ログを表示するために、次のスクリプトを作成しました。

(zgrep -E "ERROR|Exception" $SS_HOME/logs/*.gz $PROBE_HOME/logs/*.gz $RELAY_HOME/logs/*.gz ;find . -type f -name "*.log" -exec cat {} +) | grep -F ERROR | sort

行数を追加する方法がわかりません。追加情報が必要な場合はお知らせください。

ベストアンサー1

一致する行を表示するには、次を使用して数を計算して表示しますawk

awk '/ERROR/{err++; print} END{print "errors:", err}'

エラーと例外の要約:

awk '/ERROR/||/Exception/{faults++; print} END{print "faults:", faults}'

エラーと例外を別々に計算します。

awk '/ERROR/{err++; print} /Exception/{exc++; print}
     END{print "errors:", err, "exceptions:", exc}'

注:awkプログラムはフィルタとして機能し、標準入力から読み取って標準出力に書き込みますが、データファイルを引数として提供することもできます。したがって、使用することは(以下の説明で要求されているように)1つ以上のログファイルがある場合、またはuseにawk '...' *.log解析する前に1つ以上のgzファイルを解凍したい場合ですawk。たとえば、上記のzcat *.gz | awk '...'プログラムawkのいずれかを使用すると置き換えられます。によってawk '...')。

おすすめ記事