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.

Cómo pasar elementos de dos arreglos a un comando paralelo con :::

Estoy intentando ejecutar varios comandos de Python en paralelo con el comando paralelo.

Intenté jugar con el comando paralelo pero no funcionó como esperaba.

Aquí está mi script de shell

arr_1 = (a.log b.log c.log d.log)
arr_2 = (a.json b.json c.json d.json)
paralelo –halt 2 echo “{1} {2} ” ::: “${arr_1[@]}” ::: ${arr_2{@}}

Lo que esperaba es:

a.log a.json
b.log b.json
c.log c.json
d.log d.json

Pero lo que obtuve fue:

a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json

Parece que el script de shell ejecutó el comando 16 veces.

Supongo que no pasé las dos listas correctamente, pero no estoy seguro.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es un error tipográfico en el nombre del segundo array en el comando. En lugar de ${arr_2{@}}, debería ser ${arr_2[@]}. Esta sintaxis especifica que se deben utilizar todos los elementos del array, mientras que el error tipográfico provocó que el comando se repitiera varias veces. El comando corregido sería:

    arr_1=(a.log b.log c.log d.log)
    arr_2=(a.json b.json c.json d.json)
    parallel --halt 2 echo "{1} {2}" ::: "${arr_1[@]}" ::: "${arr_2[@]}"
    

    Este comando debe producir la salida deseada:

    a.log a.json
    b.log b.json
    c.log c.json
    d.log d.json
    

    Si todavía tiene algún problema, verifique que tenga instalado GNU Parallel y que sus comandos de Python estén correctamente formateados para ser ejecutados en paralelo con esta herramienta.

Comments are closed.