Marco Ceppiはawk
このためのより良いツールであることは正しいですが、awkはそのロジックをに移動できるため、より良いツールでもsort
あります。1000行をテーリングしているだけなら、大きな違いはありませんが、巨大なマルチギグログファイルを確認したい場合は、それをに移動する方がはるかに高速です。uniq
awk
awk
cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
必要なことを行いますが、大きなファイルの場合ははるかに高速です。IPアドレスをキーとして使用し、値としてIPが発生する回数を使用して、awkにIPの配列を作成します。
awkはデータの1回の受け渡しを行い、最終出力のソートを除くほとんどの作業を行うため、速度が向上します。他の方法を使用すると、転送ログに1,000,000行がある場合、awkは1,000,000 IPを吐き出す1,000,000行を読み取り、ソートは1,000,000 IP全体に渡り、ソートされた1,000,000 IPをuniqに送信します。ソートする前のデータ量。awkは、1,000,000個のIPでパイプ処理/複数のパスを実行する代わりに、ほとんどすべてを1つのパスで実行します。
私のラップトップで5,513,132行のApacheログ(1.1ギグ)を使用して、速度を比較します。
- 2分45秒
cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
- 0分40秒
cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n