各発生後に固有パターンの発生回数を印刷します。

各発生後に固有パターンの発生回数を印刷します。

発生した例外を含むログファイルがあるとします。

ExceptionA
loggedFunctionCall
ExceptionB
ExceptionA
loggedFunctionCall
ExceptionD
ExceptionB
loggedFunctionCall
ExceptionB

それぞれの他の例外が発生した回数を計算したいと思います。現在私の解決策は次のとおりです。

cat file.txt | grep Exception | sort | uniq -c | sort -n

結果:

      1 ExceptionD
      2 ExceptionA
      3 ExceptionB

ただし、右側に数を表示してこれらのインデントを削除したいので、最終的な効果は次のようになります。

ExceptionD 1
ExceptionA 2
ExceptionB 3

私は追加のbashスクリプトを書かずに純粋な端末コマンドだけを使用する簡単な解決策を探しています。

ベストアンサー1

単純なawkコマンドを使用して全体的な操作を実行できます。

awk '/Exception/{a[$0]++} END {for (x in a) print x,a[x]}' file | sort -nk2

出力

ExceptionD 1
ExceptionA 2
ExceptionB 3

連想配列の順序はawk定義されていないため、通常はにパイプする必要がありますsortk2これは、2番目のフィールドに基づいてソートすることを意味します。


ソートするもう1つの方法はGNUを使用することです。awk スケジュールされたソートそして、数値の昇順でソートします。

awk '/Exception/{a[$0]++} END {
        PROCINFO["sorted_in"] = "@val_num_asc"
        for (x in a) print x,a[x]
    }' file

または、既存のコマンドを保持して両方のフィールドの位置を置き換えるには、次のように変更できます。

grep 'Exception' file | sort | uniq -c | awk '{print $2,$1}' | sort -nk2

おすすめ記事