2010-10-24 14 views
2

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.在上面的簡單例子中,我可以看看數字並告訴。但是對於任意列表,如何在不實際注入輸入流中的塊#的情況下訪問信息?

回答

0

我只看到你能做到這一點,如果你改變你的輸入,並添加序列號:

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

目前還不清楚爲什麼你需要這個,但如果你的最終目標是保持輸出在同爲了作爲輸入,它可能是更容易使用GNU並行:

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

觀看介紹視頻GNU並行,以瞭解更多:http://www.youtube.com/watch?v=OpaiGYxkSuQ

由於versio ñ20101113 GNU並行具有被設置爲命令的序列號$ PARALLEL_SEQ:

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

這可能是你在尋找什麼。

+0

謝謝。在將序列輸入xargs之前,我已經指出了注入片段ID的可能性。由於xargs和「注入器」都需要知道split_param,因此從導出的環境變量中讀取它可能會更好。我只是想要一個快速而髒的嵌套並行器。知道segment_id將允許我標記每個xargs段生成的輸出文件。但我認爲Gnu Parallel是正確的路要走。我一直在避免它,因爲我害怕Perl的語法:) – srean 2010-10-26 01:13:45

+0

觀看視頻,你會發現你不需要知道任何關於Perl的使用GNU並行。如果您知道如何使用xargs,您已經知道如何使用GNU Parallel。 – 2010-10-26 07:35:37

相關問題