我正在尝试计算Ubuntu下一个非常大的文件夹中所有文件的行数。
这些文件是.gz文件,我使用
zcat * | wc -l
计算所有文件中的所有行,这很慢!
我想将多核计算用于此任务,并发现了有关Gnu并行的信息,
我试图使用此bash命令:
parallel zcat * | parallel --pipe wc -l
而且内核并非全部正常工作,我发现作业开始可能会导致大量开销,并尝试使用批处理
parallel -X zcat * | parallel --pipe -X wc -l
没有改善,
鉴于它们都是.gz文件,并且在对行进行计数之前需要解压缩,因此如何使用所有核心对文件夹中的所有文件中的行进行计数(此后不需要保持未压缩状态)
谢谢!
如果您有150,000个文件,则可能会遇到“参数列表太长”的问题。您可以这样避免:
find . -name \*gz -maxdepth 1 -print0 | parallel -0 ...
如果您想在行数旁边添加名称,则必须echo
自己命名,因为您的wc
进程只会从中读取内容,stdin
而不会知道文件名:
find ... | parallel -0 'echo {} $(zcat {} | wc -l)'
接下来,我们要提高效率,这将取决于您的磁盘的能力。也许parallel -j2
然后尝试一下,parallel -j4
看看在您的系统上有什么用。
正如Ole在注释中有帮助地指出的那样,您可以避免使用GNU Parallel的--tag
选项标记输出行来输出要计算其行数的文件的名称,因此这样做效率更高:
find ... | parallel -0 --tag 'zcat {} | wc -l'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句