如何使用gnu-parallel作为嵌套循环,内部一个取决于外部循环?

时间:2014-02-11 02:21:25

标签: bash gnu-parallel

我想使用gnu-parallel来并行化以下代码段

for a in `seq 5` ; do
    for b in `seq $a` ; do
        echo $a $b
    done
done

是否可以使用

之类的东西来实现
parallel echo {1} {2} ::: $(seq 5) ::: $(seq {1})

以上语法不起作用。

动机:

我想使用parallel来向集群提交大量作业,如此处所述 http://docs.rcc.uchicago.edu/software/scheduler/parallel/README.html

1 个答案:

答案 0 :(得分:1)

GNU Parallel可以做笛卡尔积。你想要的是它的一半(产品的下三角形)。 GNU Parallel无法直接执行此操作。所以你必须跳过上三角:

parallel [ {2} -gt {1} ] '||' echo {1} {2} ::: $(seq 5) ::: $(seq 5)

对于更复杂的任务,请使用$ job-> skip():

parallel echo {=1' $arg[2] > $arg[1] and $job->skip();' =} {2} ::: $(seq 5) ::: $(seq 5)