Linux

在沒有 GNU 並行的情況下跨大型文件集 grep 模式

  • November 8, 2019

我想在 36 核機器上真正快速地跨 10M 文件 grep 模式我試過這個

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

但我在兩者之間得到了一些其他結果。

有沒有更好的方法來做到這一點?

提前致謝。

鑑於您的數據位於非 RAID 硬碟上,我懷疑您會從並行化中獲得更好的性能,瓶頸很可能是 I/O,而不是 CPU。

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 的行最終將交錯。

看:

詳情。

引用自:https://unix.stackexchange.com/questions/551117