2014-02-11 4 views
1

Я хотел бы использовать Гну-параллельно распараллеливание следующий фрагмент кодаКак использовать 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}) 

приведенный выше синтаксис не работает.

Мотивация:

Я хотел бы использовать параллельно с тем, чтобы представить количество рабочих мест в кластер, как описано здесь http://docs.rcc.uchicago.edu/software/scheduler/parallel/README.html

ответ

1

GNU Parallel может сделать декартово произведение. Вы хотите половину этого (нижний треугольник продукта). GNU Parallel не может сделать это напрямую. Так что вам придется пропустить верхний треугольник:

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

Для более сложных задач используйте $ job-> пропустить():

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