2013-10-22 26 views
2

我試圖運行GNU並行指令,並通過它一串日期,這樣的事情,但更復雜的命令:如何通過參數的一部分,一個GNU並行命令

parallel '/some/binary {}' ::: 20131017 20131018 

這的作品,但後來我需要的日期跨越兩個不同的月份,命令應該是這樣的說法20131018:

'/some/binary 201310/20131018' 

所以它分裂出去的argument..how我可以達到這個效果的第一部分?在bash變量來思考我想象:

'/some/binary {:4}/{}' ::: 20130910 20131018 etc... 

回答

2

並行的命令解釋爲一個shell命令,所以你可以做

parallel --gnu 'var="{}"; /some/binary "${var:0:6}/$var"' ::: 20131017 20131018 

這將執行

/some/binary 201310/20131017 
/some/binary 201310/20131018 
0

對於純粹醜陋的,不要忘記awk來模擬數據與結果管道並行:

$ echo 20131017 > foo 
$ echo 20131018 >> foo 
$ awk '{printf "%s/%s\n", substr($1,0,4), $1}' foo | parallel echo 

醜陋的一面,這是管道友好的。一個普通的print以及一些OFS魔術會比我懷疑的printf乾淨得多。如果這是你的堵塞,你可以交替使用sed

這就是說,我個人修改/some/binary不要期望這樣不起眼的輸入。

1

從20140722,您可以:

parallel /some/binary '{=s/..$//=}'/{} ::: 20131017 20131018 
相關問題