Estoy usando xargs
con la opción --max-args=0
(alternativamente -P 0
).
Sin embargo, la salida de los procesos se fusiona en la stdout
secuencia 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 egrep
con ^
mi patrón en toda la xargs
producción este es echar a perder mi resultado.
¿Hay alguna forma de obligar xargs
a 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.
xargs
no parece proporcionar tal característica.
make
la función de trabajos, creo que make
combina las líneas de salida correctamente.
--line-buffered
bandera para egrep
ayudar
xargs
.