我正在尝试使用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-*****
答案 0 :(得分: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}'"
答案 1 :(得分: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
答案 2 :(得分: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}'