es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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í:

    seq 2000 | parallel --line-buffer --jobs 1 "echo {}"
    

    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.

Comments are closed.