我想在一台36台核心机器上快速地实现一种跨越10M文件的grep模式--我尝试过这样做
find . -name '*.xml' -type f | xargs -P 20 grep "username" >> output但我在中间得到了一些其他的结果。
有什么更好的方法吗?
提前谢谢。
发布于 2019-11-08 13:48:45
考虑到您的数据是关于非突袭HDD,我怀疑您将获得更好的性能通过并行,瓶颈是最有可能是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的行将被交错。
请参见:
了解详细信息。
发布于 2019-11-08 12:12:40
我想是因为这个模式太笼统了。通常,命令行实用程序会将错误打印到stderr或终端。他们不应该进入输出文件。
https://unix.stackexchange.com/questions/551117
复制相似问题