0

我正在尝试使用 AWK 捕获 EC2 命令的输出。AWK 部分有效,EC2 命令有效。问题是,我将参数传递给脚本,其中一个与 AWK 的风格相冲突。具体来说print $2

适当的段是

cmd="/opt/aws/bin/ec2-run-instances -O $secid  -W $seckey $ami  -n $1 -g $secg -k $sshkey -t $instsize -z $2 | awk '/^INSTANCE/ {print $2}'

如您所见,我需要打印 $2 来捕获 EC2 实例 ID。有没有不改变我的 arg 格式的解决方法?

谢谢!

RESERVATION     r-******      ********    www.abc.com
INSTANCE        i-****      ami-*****
4

3 回答 3

2

我相信你只需要为 awk 转义它,这样 shell 就不会替换$1等等$2,就像这样:

awk '/^INSTANCE/ {print \$2}'

或您的 CMD 变量:

cmd="/opt/aws/bin/ec2-run-instances -O $secid  -W $seckey $ami  -n $1 -g $secg -k $sshkey -t $instsize -z $2 | awk '/^INSTANCE/ {print \$2}'"
于 2013-05-22T03:26:57.877 回答
2
result=$(/opt/aws/bin/ec2-run-instances -O $secid  -W $seckey $ami  -n $1 -g $secg -k $sshkey -t $instsize -z $2 | awk '/^INSTANCE/ {print $2}')
for instance_id in $result; do echo $instance_id; done
于 2013-05-22T03:48:52.430 回答
1

尝试这样的事情:

cmd="/opt/aws/bin/ec2-run-instances -O $secid  -W $seckey $ami  -n $1 -g $secg -k $sshkey -t $instsize -z $2 | awk -v var=$2 '/^INSTANCE/ {print var}'
于 2013-05-22T03:48:48.510 回答