xargs从wc -l打印输出

时间:2015-09-01 15:12:29

标签: linux bash xargs

我想使用xargs计算压缩文件列表中4行的块数,并使用8个CPU并行计数,如下所示:

find $PWD/ -name "*.ext.gz" | xargs -t -n1 -P8 -I % gunzip -c % | paste - - - - | wc -l    

目前,这个单线程进行计算,但除了最后一个之外我看不到输出计数。

我需要添加什么才能看到与输入文件关联的wc -l的数字? 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你的假设是错误的。看起来你希望

gunzip -c <filename> | paste - - - - | wc -l
将为find报告的每个文件运行

。这是不正确的。实际发生的是

gunzip -c <filename>
正在为每个文件运行

,每个未压缩文件的输出都被合并为一个大体,并且正在对该组合结果运行paste - - - - | wc -l

更好的方法是编写一个简短的shell脚本,比如count_groups.sh,看起来像这样:

#!/bin/bash
nlines=$(gzcat $1 | wc -l)
(( ngroups = nlines / 4 ))
echo "$1 : $ngroups"

然后,运行chmod +x count_groups.sh,然后运行

find $PWD/ -name "*.ext.gz" | xargs -t -n1 -P8 -I% ./count_groups.sh %