2015-04-22 40 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