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