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