Команда терминала для запуска тестов с использованием GNU Parallel

У меня есть папка с проблемами, которая выглядит так:

 problem1, domain 1
 problem2, domain 2
 problem3, domain 3

Я хочу использовать GNU Parallel для решения таких задач. Это короткая версия того, что я пробовал:

 seq 01 20 | parallel -k -j6 java pddl/benchmarks_STRIPS/psr/p{}-domain.pddl -f pddl/benchmarks_STRIPS/psr/p{}.pddl

Мне нужна какая-то команда, которая сообщит GNU параллельно, что домен 1 должен быть скомпилирован с проблемой 1, домен 2 — с проблемой 2 и т. д. Есть ли способ сделать это с помощью GNU или я должен написать каждый по отдельности?


person Relentless    schedule 18.04.2016    source источник
comment
Что не так с текущей командой?   -  person Mark Setchell    schedule 18.04.2016
comment
@Mark Setchell Неустановление соединения между доменом 1 должно использоваться с проблемой 1 и т. д. 'Исключение в потоке main java.lang.NullPointerException в java.io.File.‹init›(File.java:277 )' Это ошибка, которую я получаю, но я могу запустить ее самостоятельно, например: 'psr/p01-domain.pddl -f psr/p01.pddl'   -  person Relentless    schedule 18.04.2016
comment
Ваш seq 01 20 производит числа с нулевым дополнением? Мой нет. Возможно, вам нужно printf "%02d\n" $(seq 1 20) | parallel ...   -  person Mark Setchell    schedule 18.04.2016
comment
Извиняюсь! Это решено.. Это была проблема с параллельной командой. Он неправильно принимал ноль, так как файлы пронумерованы «p01» и т. Д.   -  person Relentless    schedule 18.04.2016
comment
Да, я увидел проблему, как только вы опубликовали это. Спасибо за вашу помощь.   -  person Relentless    schedule 18.04.2016
comment
Нет проблем - удачи вашему проекту.   -  person Mark Setchell    schedule 18.04.2016
comment
Спасибо! Вы можете добавить это как ответ и плохо отметить его правильно :)   -  person Relentless    schedule 18.04.2016


Ответы (2)


Я думаю, что это может быть проблема с заполнением нулями, так как моя команда seq не заполняет числа нулями.

Если у вас bash 4+ (я думаю, это правильная версия), вы можете использовать:

echo {01..20} | parallel ...

Или, если у вас более старый bash, вы можете использовать что-то вроде:

printf "%02d\n" {1..20} | parallel ...
person Mark Setchell    schedule 18.04.2016
comment
echo {01..20} | будет работать, только если вы установите -d ' '. Но вместо этого вы могли бы сделать: parallel ... ::: {01..20} - person Ole Tange; 19.04.2016

Я предполагаю, что файлы pXX-domain.pddl существуют. Вы можете использовать синтаксис {= =} GNU Parallel для вычисления имени pXX:

parallel -k -j6 java {}  -f '{= s/-domain(\.pddl)$/$1/ =}' ::: pddl/benchmarks_STRIPS/psr/p*-domain.pddl

Или, если верно обратное:

parallel -k -j6 java '{= s/(\.pddl)$/-domain$1/ =}' -f {} ::: pddl/benchmarks_STRIPS/psr/p??.pddl

Требуется GNU Parallel 20140722.

Таким образом, вам не нужно заранее знать, какие файлы существуют.

person Ole Tange    schedule 19.04.2016