2017-03-23 3 views
1

Ich benutze GNU parallel auf Linux und ich wollte einige Berechnungen darin machen, aber ich kann es nicht bekommen, um die Eingänge zu ersetzen.Gibt es eine Möglichkeit, Berechnungen in GNU parallel mit seinen Eingängen durchzuführen?

mit diesem Start, die gut funktioniert:

parallel echo {1} {2} ::: {1..2} ::: {1..2} 

Ausgang:

1 1 
1 2 
2 1 
2 2 

Ich würde so etwas tun:

parallel echo {1} $(({2} *2)) ::: {1..2} ::: {1..2} 

Aber alles, was ich bekommen ist:

bash: {2} * 2: syntax error: operand expected (error token is "{2} * 2") 

Ich versuchte expr verwenden, aber das Problem das gleiche war, ist der zweite Parameter nicht ersetzt bekommen:

parallel echo {1} $(expr {2} \* 2) ::: {1..2} ::: {1..2} 
expr: non-integer argument 
1 
1 
2 
2 

Gibt es eine Möglichkeit, es funktioniert?

Antwort

1
parallel echo {1} '{=1 $_=$arg[2]*2 =}' ::: {1..2} ::: {1..2} 

Sie sind nicht auf der Berechnung mit einem einzigen Argumente beschränkt:

parallel echo {1} '{=1 $_=$arg[1]/$arg[2] =}' ::: {1..2} ::: {1..2} 

Wenn Sie es in der Schale zu bevorzugen Sie es einfach zitieren müssen:

parallel echo {1} '$(expr {2} \* 2)' ::: {1..2} ::: {1..2} 
+0

Ihren ersten Vorschlag verwenden alles, was ich bekomme, sind Ausgaben wie folgt: '1 {= 1/usr/bin/parallel = [2] * 2 =}' – Nogoseke

+0

Ich bemerkte, dass meine Version von Parallel nicht sehr aktuell war, ich aktualisierte sie auf Version 20170322 und jetzt funktioniert es ganz gut. Vielen Dank! – Nogoseke

Verwandte Themen