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.030s
awk は解釈されたプログラミング言語であり、grep はコンパイルされた C コード プログラムです (ファイル内のパターンを見つけるためにさらに最適化されています)。
(注 - キャッシュによって結果が歪められる可能性がないように、両方のコマンドを 2 回実行しました)
ウィキペディアのインタープリター言語の詳細。
Stephane がコメントで正しく指摘しているように、使用する grep と awk の実装、使用しているオペレーティング システム、および処理している文字セットによって、走行距離が異なる場合があります。
最も具体的で表現力豊かなツールを使用してください。ユース ケースに最も適したツールが最も高速である可能性があります。
大まかなガイドとして:
- 部分文字列または正規表現に一致する行を検索していますか? grep を使用してください。
- 単純に区切られたファイルから特定の列を選択しますか?カットを使用してください。
- パターンベースの置換を実行するか、または ... sed が合理的に実行できるその他の処理を実行しますか? sed を使用します。
- 上記の 3 つの組み合わせ、printf フォーマット、または汎用ループと分岐が必要ですか? awk を使用します。
文字列のみを検索し、速度が重要な場合は、ほとんど常に grep
を使用する必要があります . awk
より桁違いに速い 大まかな検索に関しては。
source 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 million