Estoy usando xargscon la opción --max-args=0(alternativamente -P 0).
Sin embargo, la salida de los procesos se fusiona en la stdoutsecuencia sin tener en cuenta la separación de línea adecuada. Así que a menudo terminaré con líneas como:
<start-of-line-1><line-2><end-of-line-1>
Como estoy usando egrepcon ^mi patrón en toda la xargsproducción este es echar a perder mi resultado.
¿Hay alguna forma de obligar xargsa escribir las salidas del proceso en orden (cualquier orden, siempre que la salida de un proceso sea contigua)?
¿O alguna otra solución?
Editar: más detalles sobre el caso de uso:
Quiero descargar y analizar páginas web de diferentes hosts. Como cada página tarda aproximadamente un segundo en cargarse y hay unas pocas docenas de páginas, quiero paralelizar las solicitudes.
Mi comando tiene la siguiente forma:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Uso bash y no algo como Perl porque las IP del host (la variable $ IPs) y algunos otros datos provienen de un archivo bash incluido.
xargsno parece proporcionar tal característica.
makela función de trabajos, creo que makecombina las líneas de salida correctamente.
--line-bufferedbandera para egrepayudar
xargs.