web-dev-qa-db-ja.com

非常に大きなファイルでgrep / sed / awkはどの程度うまく機能しますか?

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

1TBのファイルがあるとしましょう。そのファイル内のテキストを処理したい場合、個々のコマンドgrep、sed、awkを使用したり、それらを混合したりすると、タイムフレームはどのようになりますか。

結果はハードウェアの仕様に基づいて異なるため、特定の回答は明らかに不可能ですが、一般的な見積もりが得られれば役立つでしょう。

5
Luke Pafford

一般的に私はgrepが最も速く、sedが最も遅いと言います。もちろん、これは正確に何をしているのかに依存します。 awksedよりもはるかに高速です。

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

パイプで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コマンドに基づいていることに注意してください。また、さまざまな実装を試し、速度を比較することもできます。

4
rudimeier