2015-06-03 4 views
6

Voglio eseguire un programma prog in parallelo usando GNU parallel, con un argomento che accetta un valore in una sequenza. Per esempio:GNU parallelo con sequenza variabile?

parallel prog ::: {1..100} 

Tuttavia, non so il limite superiore della sequenza in anticipo, quindi mi piacerebbe essere in grado di fare qualcosa di simile:

parallel prog ::: {1..$x} 

dove $x è un numero che calcolerò da qualche parte. Come posso raggiungere questo obiettivo?

+0

È necessario "eval'. – jordanm

+0

'eval' può essere usato, ma non è necessario o raccomandato. – chepner

risposta

5

Supponendo che il programma seq (o qualcosa di simile) è disponibile,

parallel prog ::: $(seq 1 $x) 

In caso contrario, è possibile fingere:

parallel prog ::: $(for ((i=1; i < x; i++)) do; echo $i; done) 

Come Ole fa notare, se $x è grande, allora la sequenza risultante di numeri potrebbe essere troppo grande per adattarsi alla riga di comando. In tal caso, utilizzare uno dei due metodi sopra riportati per alimentare gli argomenti a parallel tramite input standard:

seq 1 "$x" | parallel prog 
for ((i=1; i<x; i++)) do; echo "$i"; done | parallel prog 
+1

Se $ x è grande: seq $ x | prog parallelo –