grep/sed/awk は非常に大きなファイルに対してどの程度のパフォーマンスを発揮しますか?

grep/sed/awk は非常に大きなファイルに対してどの程度のパフォーマンスを発揮しますか?

grep、sed、awk が非常に大きなファイル内のデータを検索するための実行可能なツールであるかどうか疑問に思っていました。

1TB のファイルがあるとします。そのファイル内のテキストを処理したい場合、grep、sed、awk の各コマンドを個別に使用した場合と、これらを組み合わせて使用​​した場合の時間枠はどのくらいになるでしょうか。

当然、結果はハードウェアの仕様によって異なるため、具体的な回答は不可能ですが、大まかな見積もりが得られれば助かります。

答え1

grep一般的に、 が最も速く、が最も遅いと言えますsed。もちろん、これは具体的に何をするかによって異なります。awkよりもはるかに速いと思いますsed

実際の正規表現は必要なく、単純な固定文字列のみが必要な場合は、grep を高速化できます (オプション -F)。

パイプ内で grep、sed、awk を一緒に使用したい場合は、可能であれば grep コマンドを最初に配置します。

たとえば次のようになります:

grep -F "foo" file | sed -n 's/foo/bar/p'

通常はこれよりも高速です:

sed -n 's/foo/bar/p' file

grep最初の行の は不要と思われます。

LC_ALL=Cちなみに、単純な ASCII テキスト ファイルを扱う場合は、これらのコマンドを使用すると速度が上がる可能性があります。

私の経験はすべて gnu コマンドに基づいています。異なる実装を試して速度を比較することもできます。

関連情報