Tengo un archivo con muchas líneas, y en cada línea tengo los argumentos que quiero pasar a paralelo con un tabulador.
Ejecuto este script
cat $hdd_file | grep $ssd | parallel -C 't' clean_and_destroy
Y funciona, $hdd_file es el nombre del archivo, el grep recopila las líneas cuyos discos duros tienen un cierto $ssd como caché, y luego el paralelo llama a una función que destruye su conexión.
Ahora que hice nuevas particiones en los ssd limpios, trato de llamar al paralelo así:
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache :::+ `seq $partitions_per_ssd`
Que debería obtener los argumentos de la canalización y emparejarlos con los números dados, pero no lo hace.
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`
También probé esto y todavía no funciona. Los {} :::+ se pasan como argumentos por alguna razón
Respuesta aceptada:
GNU parallel
solución:
Muestra input.txt
(para demostración):
a b
c d
e f
grep '^[ac]' input.txt
se usará para emular el comando (o canalización) que actúa como archivo fuente de entrada
parallel -C 't' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)
La salida:
a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
:::: argfiles
– tratarargfiles
como fuente de entrada.:::
y::::
se puede mezclar.
Para agregar elementos de cada fuente de entrada, agregue --xapply
opción:
parallel -C 't' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)
La salida:
a b 1
c d 2