2015-04-22 105 views
4

平行我知道我可以在一個變量使用「並行」運行任何腳本/應用程序的多個實例並行與給定的增量,如:如何與乘以增量

parallel "echo hello {}" ::: {1..16..2} 

輸出會:

hello 1 
hello 3 
hello 5 
hello 7 
hello 9 
hello 11 
hello 13 
hello 15 

我想,這樣我得到這樣的輸出使用該乘以運行變量的增量:

hello 1 
hello 2 
hello 4 
hello 8 
hello 16 

我應該在{1..16 ..#}中寫什麼?

謝謝!

+0

我認爲你需要添加'-k'放心您所需的輸出順序的...只有 –

回答

1

試試這個:

parallel "echo hello {}" ::: $(awk 'BEGIN {for(i=0; i<=16; i++) printf 2**i" "}') 

awk用來打印出來,這將然後通過parallel使用2的冪的列表。

或者:

parallel "echo hello {}" ::: $(printf '%s\n' 2^{0..16} | bc | tr '\n' ' ') 

此打印出的數字1到16,作爲字符串x^2的一部分,printf保證了每個數是在單獨的行。然後bc計算實際的數字,tr再次刪除換行符。

+0

OP希望達到16,所以最好使用'while(2^i <= 16)print 2^i ++}' –

+0

第一個命令給我: 'hello awk hello BEGIN {for(i = 0; i <= 16; i ++)printf 2 ** i「」}' 第二個按預期工作。我想看到awk版本的工作,雖然... – marc

+0

對不起,我錯過了括號括起來(命令替換語法) - 現在嘗試。 –

1

使用{= =}(在20140822後來版本):

seq 1 2 16 | parallel echo hello {} 
parallel echo hello '{= $_=2*$_ =}' ::: {1..16} 
seq 1 16 | parallel echo hello '{= $_=2**$_ =}' 
parallel echo hello '{= $_=2**$_ =}' ::: {1..16} 
+0

不幸的是,對於最後三條命令,我只能從zsh: 'zsh:1:解析錯誤'附近獲得錯誤'}'' – marc

+0

我也是這樣,但只有當我使用版本<20140822時纔是。版本> 20140822. –

+0

哦,抱歉 - 沒有收到該版本的提示。我只是檢查並注意到,我仍然在20130922 - 這可能是這裏的問題... – marc