発生した例外を含むログファイルがあるとします。
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
定義されていないため、通常はにパイプする必要がありますsort
。k2
これは、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