我正在使用xargs
该选项--max-args=0
(或者-P 0
)。
但是,这些过程的输出将合并到stdout
流中,而无需考虑适当的行分隔。因此,我经常会出现以下行:
<start-of-line-1><line-2><end-of-line-1>
当我在整个输出的模式中使用egrep
with时^
,xargs
这弄乱了我的结果。
是否有某种方法可以强制xargs
按顺序写进程输出(只要一个进程的输出是连续的,任何顺序都可以)?
还是其他解决方案?
编辑:有关用例的更多详细信息:
我想从不同的主机下载并解析网页。由于每个页面需要大约一秒钟的加载时间,因此我要并行处理几十个页面。
我的命令具有以下形式:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
我使用bash而不是Perl之类的东西,因为主机IP($ IPs变量)和其他一些数据来自包含的bash文件。
解决此问题的方法将很困难,需要为每个进程的stdout使用不同的文件描述符,并使用小型服务器来收集行。
—
斯蒂芬·吉梅内斯
xargs
似乎没有提供这种功能。
@Caleb到那里去,希望对您有所帮助:-)
—
Christoph Wurm
绝对不是轻量级的解决方案,但也许您可以使用
—
斯特凡希门尼斯
make
的jobs功能,我认为可以make
正确合并输出行。
确实添加了
—
iruvar
--line-buffered
标记来提供egrep
帮助
xargs
。