10
echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]

このコマンドは次を出力します。

[パラメータ 1 パラメータ 2] [パラメータ 1 パラメータ 2]

ただし、次のように出力したいと思います。

[パラメータ 1] [パラメータ 2]

これを行う方法はありxargsますか?-L1ソリューションが複数の行と複数の引数を処理するように、これを使用する予定です。

4

5 に答える 5

9

検索でこれを見つけた人にとって、受け入れられた答えは私にはうまくいきませんでした。

echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ 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 Parallel の回答は機能しますが、GNU Parallel を作成してインストールする必要があります。(Ubuntu に同梱されているバージョンは GNU Parallel ではありません。)

于 2013-03-02T22:57:20.110 に答える
3
echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]

(私のシェルでは、エスケープする必要が[]あります。マイレージは異なる場合があります)。

于 2011-05-23T15:11:57.370 に答える
1

なぜxargsを固執するのですか?bashはこれをうまく処理できます:

p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}
于 2011-08-29T05:21:52.600 に答える
0

GNU Parallelを使用すると、次のことができます。

(echo 'param 1'; echo 'param 2') | parallel -N2 echo '\[{1}] \[{2}]'

詳細については、紹介ビデオをご覧ください:http ://www.youtube.com/watch?v=OpaiGYxkSuQ

于 2011-05-24T21:45:40.703 に答える
0

この回答で示唆されているように、与えられたものecho

パラメータ1 パラメータ2

パラメータ 3 パラメータ 4

次のパイプ:

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

生成:

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

それぞれに 2 つのパラメーターを持つ多くの行を含むファイルがある場合は、引数をおよびとして再利用するために、myFile.txtに基づいて次の戦略を使用します。xargs$f$g

cat myFile.txt | xargs -n1 | while read f; read g; do echo $f $g; done
于 2013-10-21T14:54:55.317 に答える