我想使用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
答案 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)