AWK打印$ 2打破Bash Args

时间:2013-05-22 03:13:55

标签: bash awk

我正在尝试使用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-*****

3 个答案:

答案 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}'