对文本文件中的每个id运行命令

时间:2013-04-26 19:23:19

标签: linux bash shell awk xargs

我有一个带有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
.....

2 个答案:

答案 0 :(得分:3)

Awk不是我在这里跳的工具。我建议xargs

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

%字符是使用-I选项设置的替换字符串,但是由于替换位于命令的末尾,在这种情况下,它不需要明确声明为{{1默认情况下只是附加到结尾:

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

答案 1 :(得分: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