是否可以在xargs调用中获取段号

时间:2010-10-24 09:04:17

标签: xargs

Xargs可用于将标准输入的内容切割为可管理的部分,并在每个这样的部分上调用命令。但是有可能知道它是哪一块吗?举个例子:

seq 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 :(得分:0)

如果您更改输入并添加序列号,我只会看到您可以这样做:

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

这可能正是您所寻找的。