2015-04-18 47 views
3

3個獨立的參數。如果我有以下:分割線分成使用xargs的

$ printf '%s\n' "${fa[@]}" 

1 2 3 
4 5 6 
7 8 9 

,其中每行是一個新的數組元素。我希望能夠通過空格分隔符來分割元素,並將結果作爲3個單獨的參數使用,並將其轉換爲xargs。

例如,第一元件是:

1 2 3 

其中使用xargs的我想通過123成一個簡單的echo命令,例如:

$ echo $0 
1 
4 
7 

$ echo $1 
2 
5 
8 

$ echo $2 
3 
9 
6 

所以我一直在試圖以下列方式進行:

printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -d' ' -n 3 bash -c 'echo $0' 

這給:

1 
2 
3 4 
5 
6 7 
8 
9 10 

其中除了怪網上訂購 - 試圖xargs -d' ' -n 3 bash -c 'echo $0'不打印出來的第一個「要素」的每一行即

$ echo $0 
1 
4 
7 

而是打印他們全部。

我在問的是,對於每個元素,我如何將行分成三個可以通過xargs引用的獨立參數?

謝謝!

+0

出於好奇,輸出中'10'是從哪裏來的? –

+0

輸入文件實際上更長(更長!),儘管相同的三列格式。爲了便於解釋這個問題,我把它剪掉了。 – brucezepplin

回答

3

你是朝着正確的方向

要聲明一個數組:

fa=('1 2 3' '4 5 6' '7 8 9') 

達到你想要的東西:

printf '%s\n' "${fa[@]}" | xargs -n 3 sh -c 'echo call_my_command --arg1="$1" --arg2="$2" --arg3="$3"' argv0 

這會響應你以下行(改變命令即相應地傳遞給xargs)

call_my_command --arg1=1 --arg2=2 --arg3=3 
call_my_command --arg1=4 --arg2=5 --arg3=6 
call_my_command --arg1=7 --arg2=8 --arg3=9 

如果我再補充你的答案,並改變了它一點點,我們會得到以下

printf '%s\n' "${fa[@]}" | cut -d' ' -f1,2,3 | xargs -n 3 bash -c 'echo $0 $1 $2' 

通知失蹤xargs的-d」',這個選項是不是在xargs的某些版本。