GNU Parallel: ¿Ejecutar código bash que lee (número de secuencia) desde una tubería?
Me gustaría que “parallel” leyera el tubo de (seq numbers), por lo que me gustaría ejecutar algo como esto:
seq 2000 | parallel –max-args 0 –jobs 10 “{ read test; echo $test; }”
Sería equivalente a ejecutar:
echo 1
echo 2
echo 3
echo 4
…
echo 2000
Pero desafortunadamente, el tubo no fue leído por “parallel”, lo que significa que en su lugar se ejecutó de la siguiente manera:
echo
echo
echo
…
echo
Y la salida está vacía.
¿Alguien sabe cómo hacer que “parallel” lea el tubo de los números seq? Gracias.
davy.ai
Para leer en paralelo la secuencia de números en el tubo, podemos usar la opción
--line-buffer
junto con--jobs 1
. Esto obligará a parallel a leer la entrada línea por línea y ejecutar el comando para cada línea por separado.El comando actualizado se vería así:
Esto mostrará los números del 1 al 2000, uno por línea. Puedes reemplazar “echo {}” con el comando deseado.
Explicación de las opciones utilizadas:
--line-buffer
: Obliga a parallel a leer la entrada línea por línea en lugar de almacenarla en un búfer.--jobs 1
: Limita el número de trabajos en paralelo a uno, para que cada línea se procese por separado.{}
: Marcador de posición para la entrada del tubo.