Linux
在沒有 GNU 並行的情況下跨大型文件集 grep 模式
我想在 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 的行最終將交錯。
看:
詳情。