Entonces tengo un ciclo while:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Pero esto puede llevar mucho tiempo. ¿Cómo usaría GNU Parallel para este ciclo while?
shell-script
files
gnu-parallel
Proletariado
fuente
fuente
tee
conparallel
al poner la salida ensortedstuff
? Entonces puedo ver la salida a medida que avanza.>
con,| tee
por ejemplo, el primer comando se convierte enparallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Como un tipo de Unix de la vieja escuela "haz una cosa y hazlo bien", pondría las cosas de sustitución de cadenas en un script de envoltura:
Si lo llama
wrapper.sh
, elparallel
comando para llamarlo sería:Tenga en cuenta que no necesita
cat
este tipo de cosas, lo que ahorra una invocación de programa externo.fuente
No es necesario
parallel
, ya que el cuerpo del bucle no depende de las iteraciones anteriores. Simplemente inicie un nuevo proceso en segundo plano para cada host.parallel
sin embargo, facilita la gestión de ciertos aspectos; puede limitar la cantidad de trabajos que se ejecutan en paralelo más fácilmente.fuente
wc -l live_hosts
es mayor que el número de ejes de disco o núcleos de CPU, dependiendo de si la tarea es de E / S o vinculada a la CPU, va a comer mucha de la ventaja que obtiene del paralelismo con una solución como esa. La capacidad deparallel
limitar el número de trabajos no solo es agradable, es casi esencial, si la velocidad de procesamiento es su objetivo.