echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]
このコマンドは次を出力します。
[パラメータ 1 パラメータ 2] [パラメータ 1 パラメータ 2]
ただし、次のように出力したいと思います。
[パラメータ 1] [パラメータ 2]
これを行う方法はありxargs
ますか?-L1
ソリューションが複数の行と複数の引数を処理するように、これを使用する予定です。
検索でこれを見つけた人にとって、受け入れられた答えは私にはうまくいきませんでした。
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 ではありません。)
echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]
(私のシェルでは、エスケープする必要が[]
あります。マイレージは異なる場合があります)。
なぜxargsを固執するのですか?bashはこれをうまく処理できます:
p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}
GNU Parallelを使用すると、次のことができます。
(echo 'param 1'; echo 'param 2') | parallel -N2 echo '\[{1}] \[{2}]'
詳細については、紹介ビデオをご覧ください:http ://www.youtube.com/watch?v=OpaiGYxkSuQ
この回答で示唆されているように、与えられたもの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