Подтвердить что ты не робот

Разделение командной строки args с параллельной GNU

Использование GNU parallel: http://www.gnu.org/software/parallel/

У меня есть программа, которая принимает два аргумента, например

$ ./prog file1 file2
$ ./prog file2 file3
...
$ ./prog file23456 file23457

Я использую script, который генерирует пары имен файлов, однако это создает проблему, потому что результатом script является одна строка, а не пара. как:

$ ./prog "file1 file2"

GNU parallel Кажется, у него появилось множество трюков в рукавах, интересно, есть ли там для разделения текста вокруг разделителей:

$ generate_file_pairs | parallel ./prog ?  
  # where ? is text under consideration, like "file1 file2"

Легкая работа заключается в том, чтобы разделить args вручную в prog, но я хотел бы знать, возможно ли это в GNU parallel.

4b9b3361

Ответ 1

Возможно, вы ищете --colsep.

generate_file_pairs | parallel --colsep ' ' ./prog {1} {2}  

Подробнее читайте man parallel. И посмотрите видеоролик, если вы еще этого не сделали http://www.youtube.com/watch?v=OpaiGYxkSuQ

Ответ 2

Вы ищете параллельную параллельную опцию -n. Это то, что вы ищете:

./generate_file_pairs | parallel -n 2 ./prog {}

Выдержка из Параллельный документ GNU:

-n max-args
    Use at most max-args arguments per command line. Fewer than max-args 
    arguments will be used if the size (see the -s option) is exceeded, 
    unless the -x option is given, in which case GNU parallel will exit.

Ответ 3

В параллельном руководстве говорится:

Если команда не указана, выполняется строка ввода... GNU parallel часто можно использовать в качестве замены xargs или cat | bash.

Итак, попробуйте:

generate command | parallel

Попробуйте понять результат этого:

for i in {1..5};do echo "echo $i";done | parallel