我正在使用 AWS cli 从我的 AWS 账户中提取一些数据。我无法提取确切的字符串。当我发出以下命令时:-
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| column -t | grep production
我得到的输出为
sftp_gateway_instance rhel production i-0aec9xxxxxxxxxxxd t2.xlarge vpc-zzzzzz1b running 2.3.4.5 3.2.1.2
abc-production-nav-1 rhel production i-0e4xxxxxxxxxxxxx3 t2.xlarge vpc-zzzzzz1b running 1.1.6.5 None
xyz-produ-nav rhel production i-0xxxxxxxxxxxxxx18 t2.xlarge vpc-zzzzzz1b running 2.8.0.4 None
solutions-production-navi centos uat i-08fffffffffff86c8 t2.large vpc-zzzzzz1b running 2.8.9.2 None
在上面提供的输出中,我不需要最后一行,因为实例名称中提到了生产,而不是环境列中。
我尝试了下面的 awk 命令,但在这种情况下,输出不会以正确的列格式出现
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| awk -F ' ' '$3 == "production" {print $1 "\t\t" $2 "\t" $3"\t" $4"\t" $5"\t" $6"\t" $7"\t" $8"\t" $9 }'
这种情况下的输出如下:-
abc-production centos production i-xyzabcdef t2.xlarge vpc-xyzabc running 2.18.1.0 None
doc-pdf-prod windows production i-xyzabcdef t2.large vpc-xyzabc running 172.18.70.229 None
我想要正确的列格式的输出,就像我使用 grep 得到的上面的输出一样。有人可以建议为此做些什么吗?
答案1
使用 ,而不是grep production
匹配其中包含“生产”的任何行,而使用awk '$3 == "production"'
,它仅匹配第三个字段为“生产”的行。
不需要在awk
: 中进一步执行任何操作,默认情况下它将打印整个匹配行。