Можно ли получить номер сегмента в вызове xargs? - PullRequest
2 голосов
/ 24 октября 2010

Xargs может использоваться, чтобы разрезать содержимое стандартного ввода на управляемые части и вызывать команду для каждой такой части. Но возможно ли узнать, что это за произведение? Для примера:

сек. 1 10 | xargs -P 2 -n 2 mycommand

позвонит

mycommand 1 2 &
mycommand 3 4 &
mycommand 5 6 &
mycommand 7 8 &
mycommand 9 10 &

Но я бы хотел знать в моем скрипте "mycommand", что

mycommand 1 2

обрабатывает первый фрагмент / сегмент и так далее. Можно ли получить доступ к этой информации?

p.s. В простом примере выше я могу просто посмотреть на цифры и сказать. Но для произвольных списков, как можно получить доступ к информации, не вставляя фрагмент # во входной поток?

1 Ответ

0 голосов
/ 25 октября 2010

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

seq 1 10 | perl -ne '$. % 2 and print (($.+1)/2,"\n"); print' | xargs -n3 ...

Неясно, зачем вам это нужно, но если ваша конечная цель - сохранить результат вв том же порядке, что и для ввода, может быть проще использовать GNU Parallel:

seq 1 10 | parallel -j+0 -n2 -k mycommand 

Посмотрите вводное видео для GNU Parallel, чтобы узнать больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Начиная с версии 20101113 GNU Parallel имеет$ PARALLEL_SEQ, для которого задан порядковый номер команды:

seq 1 10 | parallel -j+0 -n2 -k mycommand \$PARALLEL_SEQ

Это может быть именно то, что вы ищете.

...