Estou usando xargs
com a opção --max-args=0
(como alternativa -P 0
).
No entanto, a saída dos processos é mesclada no stdout
fluxo sem levar em consideração a separação de linha adequada. Então, muitas vezes acabo com linhas como:
<start-of-line-1><line-2><end-of-line-1>
Como eu estou usando egrep
com ^
no meu padrão em toda a xargs
saída isto é estragar o meu resultado.
Existe alguma maneira de forçar xargs
a gravação das saídas do processo em ordem (qualquer ordem, desde que a saída de um processo seja contígua)?
Ou alguma outra solução?
Edit: mais detalhes sobre o caso de uso:
Quero baixar e analisar páginas da web de diferentes hosts. Como cada página leva cerca de um segundo para carregar e há algumas dúzias de páginas, eu quero paralelizar as solicitações.
Meu comando tem o seguinte formato:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Eu uso o bash e não algo como Perl porque os IPs do host (a variável $ IPs) e alguns outros dados vêm de um arquivo bash incluído.
xargs
parece não fornecer esse recurso.
make
o recurso de trabalhos, acho que make
mescla as linhas de saída corretamente.
--line-buffered
bandeira para egrep
ajuda
xargs
.