GNU/Linux >> Linux の 問題 >  >> Linux

grep と awk の使用

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

Linux
  1. Grepを使用して発生の総数をカウントしますか?

  2. Grepを使用して行の最後のアイテムを検索しますか?

  3. awk または sed を使用して特定の文字を削除する

  1. grepを使用して単語の接頭辞を削除するには?

  2. sed を使用して空行を削除する

  3. ORS、NR、FS、RSを使ったawkコマンドの解説

  1. awkを使用して一致が見つかったかどうかを表示する

  2. インデックスを使用してgrepを高速化しますか?

  3. 用語をgrepして別の用語を除外する