特定のパターンをキャプチャしてawk
使用grep
できます。なぜ私たちは他のものを使うべきですか?どちらが速く、その理由は何ですか?
ログファイルがあり、特定のパターンを取得するには、次のいずれかを実行できます。
awk '/pattern/' /var/log/messages
または
grep 'pattern' /var/log/messages
ベンチマークをしたことがないのでよくわかりません。誰かがこれについて詳しく説明してもらえますか?両方のツールの内部の仕組みを知ることをお勧めします。
ベストアンサー1
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つのコマンドを2回実行しました。)
詳細は解釈言語ウィキペディアで。
Stephaneがコメントで正確に指摘したように、使用するgrepとawkの実装、オペレーティングシステム、および扱う文字セットによってマイルが変わる可能性があります。