2011-05-23 59 views
9
echo "'param 1' 'param 2'" | xargs -n2 [email protected] echo [@] [@] 

該命令輸出:可以分隔參數嗎?

[PARAM 1參數2] [PARAM 1參數2]

然而,我將它想輸出:

[PARAM 1] [參數2]

有一種方法來用xargs做這個?我打算使用此與-L1因此該解決方案將處理多個線以及多個參數。

+0

什麼你究竟想達到什麼目的?你是否試圖在執行一個命令之前「裝飾」每個文件名參數,並且一次只處理一對文件名?我通常會爲'xargs'編寫一個腳本來執行這個工作 - 這比將xargs轉換成它不想做的事情要痛苦得多。 – 2011-05-23 15:28:52

回答

8

對於那些從搜索中找到這個的人,我接受的答案並不適用。

echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\] 

生產:

[param 1] [param 1] 
[param 2] [param 2] 

不符合原來的海報有xargs的多個實體讀取給出的要求,把它們分開,並將它們發送到一個命令(「回聲」 OP)作爲單獨的參數。 xargs的是不適合這種任務的!


bash的答案可以工作。

p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}] 

生產:

[param1] [param2] 

但這種方法不能與一個以上的線上工作。


在bash正確的溶液用於發送對線作爲參數傳遞給一個命令是:

(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done 

生產:

[param 1] [param 2] 
[param 3] [param 4] 


的GNU並行答案確實有效,但是GNU並行mu製作和安裝。(與Ubuntu打包版本不是GNU並行。)

+0

@wok,你能詳細說明一下嗎?如何使用xargs來生成我用bash生成的內容以及OP所需要的內容? – Sarkom 2013-11-04 03:10:16

+0

如果您想對文件的每一行應用相同的處理方法,請參閱http://stackoverflow.com/a/19497860/376454。 – Wok 2013-11-04 14:23:15

+0

我再次嘗試過,並且**在Linux上的文件**,我**需要**使用'xargs',如我的答案中所示。只有你的答案,輸出中沒有**換行符**,只是'[參數1] [參數2] [參數3] [參數4]''。除了這些細節外,你的答案非常好。 – Wok 2013-11-04 14:58:08

4
echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\] 

(在我的殼,我需要逃避[],您的里程可能會有所不同)。

+1

我會如何區分第一個和第二個?例如,如果我想交換2個參數的順序? – John 2013-09-27 00:35:15

1

爲什麼棒xargs的? bash可以處理這個問題:

p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]} 
0

如圖this answer建議,給定的一個echo

的param1 param2的

PARAM 3 param4

下列管材:

... | while read line1; read line2; do echo "[$line1] [$line2]"; done 

生產:

[param1] [param2] 
[param3] [param4] 

如果你有一個包含許多行,每兩個參數myFile.txt文件,使用基於xargs以下策略,以重新使用的參數爲$f$g

cat myFile.txt | xargs -n1 | while read f; read g; do echo $f $g; done