3

要約:ファイルから一意の行と出現回数を取得する方法はありますsort | uniq -c | sort -nか?

詳細sort | uniq -c | sort -n:ログ分析を行って、どのログ エントリが最も多く/最も少なく表示されるかなどの一般的な傾向を取得するときに、パイプを使用することがよくあります。非常に多くの重複があります (この場合sort | uniq -c、時間がかかります)。

: 私が現在直面している特定のケースは、「パラメータ化されていない」mysql bin ログからトレンドを取得して、どのクエリが最も実行されているかを調べることです。パラメータを削除するためにgrep/sedの組み合わせを通過する100万個のエントリのファイルの場合-約150の一意の行になります-約3秒のgrepとsedding、および約15秒のsorting/uniq'ingを費やします。

現在、私は < line, count > のマップを維持する単純な C++ プログラムに落ち着きました - これは 1 秒もかからずに仕事をします - しかし、既存のユーティリティが既に存在するかどうか疑問に思っていました。

4

1 に答える 1

6

パフォーマンスの違いがどうなるかはわかりませんが、sort | uniq -cを単純なawkスクリプトに置き換えることができます。重複が多く、並べ替えではなくハッシュ化されているため、より高速だと思います。

 awk '{c[$0]++}END{for(l in c){print c[l], l}}' input.txt | sort -n
于 2012-06-24T01:55:31.980 に答える