2

以下のような ID のリストを含むテキスト ファイルがあり、これらの ID ごとに以下のコマンドを実行する必要があります。awk で行う簡単な方法はありますか?

ssh -p 29418 company.com gerrit review --code-review 2 -- file.txt

file.txt には以下が含まれます。

297003
297002
297001
...

次のコマンドは、id が file.text に存在する限り実行する必要があります。

ssh -p 29418 company.com gerrit review --code-review 2 -- 297003
ssh -p 29418 company.com gerrit review --code-review 2 -- 297002
ssh -p 29418 company.com gerrit review --code-review 2 -- 297001
.....
4

3 に答える 3

3

awk は、私がここで飛びつくようなツールではありません。私は提案しxargsます:

xargs -I% -n1 < file ssh -p 29418 company.com gerrit review --code-review 2 -- %

この%文字は、-Iオプションで設定された置換文字列ですが、この場合、置換はコマンドの最後にあるため、明示的に指定する必要はありませんxargs。デフォルトでは単に最後に追加されます。

xargs -n1 < file ssh -p 29418 company.com gerrit review --code-review 2 --

echo実際に実行する前に、コマンドを使用して出力を確認することをお勧めします。

# -------------- notice we run echo not ssh to see the output before we rut it 
xargs -n1 < file echo ssh -p 29418 company.com gerrit review --code-review 2 -- 
ssh -p 29418 company.com gerrit review --code-review 2 -- 297003
ssh -p 29418 company.com gerrit review --code-review 2 -- 297002
ssh -p 29418 company.com gerrit review --code-review 2 -- 297001

-n1オプションを指定しないと、次xargsの使用法に応じて、この特定の状況に役立つ場合とそうでない場合があるすべての値が渡されますgerrit

xargs < file echo ssh -p 29418 company.com gerrit review --code-review 2 -- 
ssh -p 29418 company.com gerrit review --code-review 2 -- 297003 297002 297001
于 2013-04-26T19:28:23.653 に答える
0

while ループを使用して各値に対して操作を実行し、値のリストを含むファイル$iの出力として値を設定します。read

while read i
do
     ssh -p 29418 company.com gerrit review --code-review 2 -- $i
done < filename

また、sudo_O が述べたように、コマンドを使用echoして、実際のコードを実行する前に生成されたコマンドを確認できます。

while read i
do
     echo "ssh -p 29418 company.com gerrit review --code-review 2 -- $i" 
done < filename
于 2013-04-28T16:10:59.887 に答える