【发布时间】:2017-11-24 06:57:43
【问题描述】:
我正在尝试计算 Ubuntu 下一个非常大的文件夹中所有文件的行数。
文件是 .gz 文件,我使用
zcat * | wc -l
计算所有文件中的所有行,这很慢!
我想为这个任务使用多核计算,发现this 关于 Gnu 并行,
我尝试使用这个 bash 命令:
parallel zcat * | parallel --pipe wc -l
并且核心并非全部工作 我发现作业开始可能会导致大量开销,并尝试使用
进行批处理parallel -X zcat * | parallel --pipe -X wc -l
没有改进,
我如何使用所有内核来计算文件夹中所有文件中的行数,因为它们都是 .gz 文件,并且需要在计算行数之前解压缩(之后不需要保持未压缩)
谢谢!
【问题讨论】:
-
我对并行不太了解,虽然从这个链接drjohnstechtalk.com/blog/2011/06/…,你应该使用更像l
ls *gz|time parallel -k "zcat {}" | wc -l的命令 -
谢谢。似乎更好地利用了核心,需要检查结果,你能解释一下语法并创建一个答案吗?
-
基本上
parallel需要输入,因此您列出文件,将其通过管道传输到并行,请求并行以保持顺序,在这种情况下可能不需要 (-k),使用并行zcat 在列表"zcat {}"的一行上,然后将整个传输到wc。顺便说一句,上面的命令有错别字,time命令应该被删除。如果没有人超过我,我今晚会写一个更明确的答案(经过我这边的一些测试)! -
谢谢!等待它。
-
现在完成了测试,它给出了所有文件中的总行数,这不是我需要的,我需要每个文件中的行数列表,我根据你回答并使用 ls dest/* |time parallel -k "zcat {} | wc -l"
标签: multithreading bash ubuntu parallel-processing gnu-parallel