我想使用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 $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 %

关于linux - xargs从wc -l打印输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32335168/

10-12 21:22