2

我有一个带有如下 id 列表的文本文件,我需要对每个这些 id 运行以下命令,在 awk 中有更简单的方法吗?

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

file.txt 包含以下内容:

297003
297002
297001
...

只要 file.text 中存在 id,就应该运行以下命令

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 read sshid
do
  ssh -p $sshid ...
done < file.txt
于 2013-04-26T19:26:37.487 回答
0

我将使用 while 循环对每个值执行操作,并将值设置为包含值列表的文件$i的 a 的输出。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 回答