回答:
grepはおそらくより高速です:
# time awk '/USAGE/' imapd.log.1 | wc -l
73832
real    0m2.756s
user    0m2.740s
sys     0m0.020s
# time grep 'USAGE' imapd.log.1 | wc -l
73832
real    0m0.110s
user    0m0.100s
sys     0m0.030sawkはインタープリター型プログラミング言語で、grepはコンパイル済みのCコードプログラムであるため(ファイル内のパターンを見つけるためにさらに最適化されます)。
(注-両方のコマンドを2回実行したため、キャッシュによって結果が歪む可能性はありません)
ウィキペディアの解釈言語に関する詳細。
Stephaneがコメントで正しく指摘しているように、使用するgrepおよびawkの実装、使用しているオペレーティングシステム、および処理している文字セットによって、走行距離が異なる場合があります。
最も具体的で表現力豊かなツールを使用します。ユースケースに最適なツールは、おそらく最速です。
大まかなガイドとして:
perl代わりに使用しますawk。あなたはgrepを/カット/ sedのより複雑なものが必要な場合は、その後、チャンスはawkは十分ではありません、あなたは「本格的」なものを必要としている
                    文字列のみを検索し、速度が重要な場合は、ほとんど常に使用する必要がありますgrep。awk粗雑な検索の場合よりも桁違いに高速です。
ソースsed、awk、およびその他のUnix解析ユーティリティの機能とパフォーマンスの違い
UTILITY    OPERATION TYPE      EXECUTION TIME     CHARACTERS PROCESSED PER SECOND
                               (10 ITERATIONS)
-------    --------------      ---------------    -------------------------------
grep       search only         41 sec.            489.3 million
sed        search & replace    4 min. 4 sec.      82.1 million
awk        search & replace    4 min. 46 sec.     69.8 million
Python     search & replace    4 min. 50 sec.     69.0 million
PHP        search & replace    15 min. 44 sec.    21.2 millionawk ... has PCRE matching for regular expressionsだけでなく、どちらが完全に間違っているかを示しています。
                    理論的にgrepはawk、実際にはYMMV よりも高速でなければならないことに同意しますが、YMMVは使用する実装に大きく依存します。
ここでは、busybox 1.20.0のgrepとawk、GNU grep 2.14、mawk 1.3.3、Debian / Linux 7.0 amd64(glibc 2.17を使用)での2.5MB行の240MBファイルのUTF-8ロケールでの比較ASCIIのみの文字。
$ time busybox grep error error | wc -l
331003
busybox grep error error  8.31s user 0.12s system 99% cpu 8.450 total
wc -l  0.07s user 0.11s system 2% cpu 8.448 total
$ time  busybox awk /error/ error | wc -l
331003
busybox awk /error/ error  2.39s user 0.84s system 98% cpu 3.265 total
wc -l  0.12s user 1.23s system 41% cpu 3.264 total
$ time  grep error error | wc -l
331003
grep error error  0.80s user 0.10s system 99% cpu 0.914 total
wc -l  0.00s user 0.11s system 12% cpu 0.913 total
$ time mawk /error/ error | wc -l
330803
mawk /error/ error  0.54s user 0.13s system 91% cpu 0.732 total
wc -l  0.03s user 0.08s system 14% cpu 0.731 total
$ time gawk /error/ error | wc -l
331003
gawk /error/ error  1.37s user 0.12s system 99% cpu 1.494 total
wc -l  0.04s user 0.07s system 7% cpu 1.492 total
$ time Cロケールでは、GNU grepのみが大幅に向上し、より高速になりmawkます。
データセット、正規表現のタイプも大きな違いを生む可能性があります。正規表現の場合、の正規表現は拡張REであるawkためgrep -E、と比較する必要がありますawk。
このデータセットのawk場合grep、busyboxベースのシステムやmawk、デフォルトawkでデフォルトのロケールがUTF-8ベースのシステム(IIRC、Ubuntuで使用されていたもの)よりも高速になる可能性があります。
簡単に言えば、grep他の多くのUNIXツールと同じように1つのことを実行するだけで、行を指定されたパターンに一致させることができます。一方、awkPOSIX標準で定義された完全なプログラミング言語であるため、パターンスキャンおよび処理用の変数、配列、式、関数、制御ステートメントなどの典型的な機能を備えた、より洗練されたツールです。
私の意見では、パターンマッチングの場合に両方のツールがどのように動作するか、および処理する入力のサイズに依存します。grepは、マッチングのみを行うため、通常awkよりも効率的であると予想されます。ただし、他のツールを使用せずに、一致したレコードの追加処理、計算、結果の印刷などのより複雑なタスクを実行する単純なコードをgrepで作成することはできません。
timeを実行するのにかかる時間を計るために、コマンドをシェルスクリプトも含めてコマンドの前に置きます。例:time ls -l。