我正在使用xargs在一组input参数上执行命令,如下所示:
cat <someinput> | xargs -n 1 -P 5 <somecmd>
input文件非常长,需要很长时间才能运行。 所以我只是等待命令提示符显示。 有没有办法显示已完成的input参数数目的进度栏?
我尝试使用“酒吧”,但我总是有一个“无限”的吞吐量。 好像xargs在执行命令之前读取整个input。

你可以使用pv:
cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>
有了这个,你会知道在哪里读取某些input ,所以你会知道大概在哪里处理某些input 。
如果你有GNU Parallel,你可以运行:
cat <someinput> | parallel --bar -P 5 <somecmd>
GNU并行是一个通用的并行程序,可以很容易地在同一台机器或多台你有ssh访问的机器上并行运行作业。
如果你想在4个CPU上运行32个不同的作业,那么最简单的方法就是在每个CPU上运行8个作业:

当一个完成时,GNU并行会产生一个新的进程 – 保持CPU活动,从而节省时间:

安装
个人安装不需要root权限。 这可以在10秒内做到这一点:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README
学到更多
查看更多示例: http : //www.gnu.org/software/parallel/man.html
观看介绍video: https : //www.youtube.com/playlist? list = PL284C9FF2488BC6D1
浏览教程: http : //www.gnu.org/software/parallel/parallel_tutorial.html
注册邮件列表以获得支持: https : //lists.gnu.org/mailman/listinfo/parallel
如果你正在寻找进展的一般指示,最简单的方法就是在做你想做的命令之前回声。
例如: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;' cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'
-I{}将-I{}设置为正在处理的当前string
sh -c将允许你执行多个命令(注意:每个命令之后都需要分号, 包括最后一个命令。