Jus*_*ASM 5 regex xml bash gnu-parallel
file.xml
是一个 74G 的大文件,我必须尽快对其进行 grep 单个正则表达式。我正在尝试使用 GNU 来做到这一点parallel
:
parallel --pipe --block 10M --ungroup LC_ALL=C grep -iF "test.*pattern" < file.xml
Run Code Online (Sandbox Code Playgroud)
--pipepart
由于它比 更快,我如何通过使用来实现它--pipe
?
通过增加或减少块的大小(例如 20M 而不是 10M,或者 10M 而不是 20M),它会变得更快吗?
1.) 我拥有的最大的 xml 文件是 11G,所以 YMMV 但使用parallel --pipepart LC_ALL=C grep -H -n 'searchterm' {} :::: file.xml
速度parallel --pipe --block 10M --ungroup LC_ALL=C grep -iF "test.*pattern" < file.xml
比grep "searchterm" file.xml
.
2.) 我没有为parallel --pipepart
上面的命令指定块大小,但您可以使用--block
选项;您需要自己尝试不同的块大小,看看它们是否会加快/减慢搜索速度。使用--block -1
这种方法在我的系统上提供了最快的速度。
正如@tshiono在评论中提到的,尝试ripgrep - 这在我的测试 xml 文件上是最快的(比 grep/并行 grep/其他任何东西都快),并且可能被证明对您来说是一个更好的解决方案。
编辑
我测试了@Ole Tange建议的“并行+ ripgrep”方法( ),它与我的系统上parallel --pipepart --block -1 LC_ALL=C rg 'Glu299SerfsTer21' {} :::: ClinVarFullRelease_00-latest.xml
的相同。rg 'Glu299SerfsTer21' ClinVarFullRelease_00-latest.xml
差异可以忽略不计,因此“parallel + rg”方法可能最适合非常大的 XML 文件。我没有看到预期的加速有很多潜在的原因,例如@Gordon Davisson在上面的评论中提出的建议,但您需要对自己的系统进行全面的基准测试,以找出最佳方法。
(感谢Ole Tange的建议和创建如此出色的软件)
归档时间: |
|
查看次数: |
401 次 |
最近记录: |