Ho un file con molte righe e su ogni riga ho gli argomenti che voglio passare in parallelo con un separatore di tabulazioni.
Eseguo questo script
cat $hdd_file | grep $ssd | parallel -C 't' clean_and_destroy
E funziona, $hdd_file è il nome del file, grep raccoglie le righe che gli hdd hanno un certo $ssd come cache, e quindi il parallelo chiama una funzione che distrugge la loro connessione.
Ora che ho creato nuove partizioni sugli ssd puliti, provo a chiamare parallel in questo modo:
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache :::+ `seq $partitions_per_ssd`
Che dovrebbe ottenere gli argomenti dalla pipe e accoppiarli con i numeri forniti, ma non lo fa.
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`
Ho provato anche questo e continua a non funzionare. I {} :::+ vengono passati come argomenti per qualche motivo
Risposta accettata:
GNU parallel
soluzione:
Esempio di input.txt
(per dimostrazione):
a b
c d
e f
grep '^[ac]' input.txt
verrà utilizzato per emulare il comando (o la pipeline) agendo come un file sorgente di input
parallel -C 't' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)
L'uscita:
a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
:::: argfiles
– trattaargfiles
come sorgente di ingresso.:::
e::::
possono essere mescolati.
Per aggregare elementi da ciascuna fonte di input:aggiungi --xapply
opzione:
parallel -C 't' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)
L'uscita:
a b 1
c d 2