GNU与变量序列并行?

bec*_*cko 7 bash gnu-parallel

我想prog使用GNU来并行运行程序parallel,其中一个参数在序列中获取值.例如:

parallel prog ::: {1..100}
Run Code Online (Sandbox Code Playgroud)

但是,我事先并不知道序列的上限,所以我希望能够做到这样的事情:

parallel prog ::: {1..$x}
Run Code Online (Sandbox Code Playgroud)

$x我在哪里计算的数字在哪里.我怎样才能做到这一点?

che*_*ner 6

假设seq程序(或类似的东西)可用,

parallel prog ::: $(seq 1 $x)
Run Code Online (Sandbox Code Playgroud)

如果没有,你可以伪造它:

parallel prog ::: $(for ((i=1; i < x; i++)) do; echo $i; done)
Run Code Online (Sandbox Code Playgroud)

正如Ole指出的那样,如果$x很大,那么结果的数字序列可能太大而无法放在命令行上.在这种情况下,使用上述两种方法之一parallel通过标准输入提供参数:

seq 1 "$x" | parallel prog
for ((i=1; i<x; i++)) do; echo "$i"; done | parallel prog
Run Code Online (Sandbox Code Playgroud)

  • 如果 $x 很大: seq $x | 并行程序 (2认同)