xargs 打印 wc -l 的输出

xargs print output from wc -l

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

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

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

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

如果我对你的问题理解正确,那你的假设是错误的。您似乎希望

gunzip -c <filename> | paste - - - - | wc -l
对于 find 报告的每个文件,

将是 运行。这是不正确的。实际发生的是

gunzip -c <filename>

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

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

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

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

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