![grep/sed/awkは非常に大きなファイルでどのように機能しますか? [閉鎖]](https://linux33.com/image/94949/grep%2Fsed%2Fawk%E3%81%AF%E9%9D%9E%E5%B8%B8%E3%81%AB%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
私はgrep、sed、awkが非常に大きなファイルからデータを見つけるための実行可能なツールかどうか疑問に思います。
1TBファイルがあるとしましょう。このファイルのテキストを処理したい場合は、別のコマンドであるgrep、sed、awkを使用して混在させると、時間範囲はどうなりますか?
もちろん、ハードウェアの仕様によって結果が異なるため、具体的な答えを出すことはできませんが、おおよその推定をしてくれれば役に立ちそうです。
答え1
grep
一般的に言えば、最も速くsed
最も遅いと言いたいです。もちろん、これは正確に何をしているかによって異なります。awk
よりはるかに速く見つかりましたsed
。
実際の正規表現を必要とせず、単純な固定文字列(オプション-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コマンドに基づいていることに注意してください。さまざまな実装を試して速度を比較することもできます。