GNU並列処理のない大規模ファイルセットのgrepパターン

GNU並列処理のない大規模ファイルセットのgrepパターン

36コアシステムで10Mファイルのパターンをすばやく見つけたいです。これを試しました。

find . -name '*.xml' -type f | xargs  -P 20 grep "username" >> output

しかし、その間に他の結果も得ました。

これを行うより良い方法はありますか?

よろしくお願いします。

ベストアンサー1

データがRAIDではなくHDDにあることを考えると、並列化によってより良いパフォーマンスが得られるかどうか疑問です。ボトルネックはCPUではなくI/Oである可能性が高いです。

LC_ALL=C grep -rwF --include='*.xml' username . > /on/some/other/disk/output

おそらくあなたが得ることができる最高に近いです。

並列化するには、次のことが必要です。

LC_ALL=C find . -name '*.xml' -type f -print0 |
  LC_ALL=C xargs -r0P20 -n 1000 grep -HFw --line-buffered username > output

4KiBより長い出力ライン(入力ライン+ファイルパス名)がないと仮定し、20本の同時grepラインが最終的にインターリーブされることに注意してください。

望むより:

もっと学ぶ。

おすすめ記事