Amazon web services 使用AWS EC2 CLI检索EC2实例属性并展平输出

Amazon web services 使用AWS EC2 CLI检索EC2实例属性并展平输出,amazon-web-services,shell,amazon-ec2,aws-cli,Amazon Web Services,Shell,Amazon Ec2,Aws Cli,我使用aws ec2 descripe instances下面的命令返回正在运行的ec2列表。输出是一个分为两行的TSV,第一行是帐户ID(OwnerId),查询的其余部分显示在第二行。我希望将所有属性放在一行中,但是由于API调用的json输出的性质,有没有一种方法可以将输出放在一行中 aws ec2描述实例--输出文本--配置文件$account--查询'保留[*].[OwnerId,实例[*].[InstanceId,InstanceType,State.Name,Platform,Pla

我使用aws ec2 descripe instances下面的命令返回正在运行的ec2列表。输出是一个分为两行的TSV,第一行是帐户ID(OwnerId),查询的其余部分显示在第二行。我希望将所有属性放在一行中,但是由于API调用的json输出的性质,有没有一种方法可以将输出放在一行中

aws ec2描述实例--输出文本--配置文件$account--查询'保留[*].[OwnerId,实例[*].[InstanceId,InstanceType,State.Name,Platform,Placement.AvailabilityZone,PublicIpAddress,PrivateIpAddress,[Tags[?Key=
Name
]值][0][0],[Tags[?Key=
Environment
]值][0]]'--filter--filters Name=实例状态名称,value=运行>>$outfile

1234567890
i-03cxxxxxxxdab t2.中等运行windows ap-东南-1a 10.0.0.0 10.10.0.10 api-abc-prod-01 prod

一行中的期望输出


1234567890 i-03cxxxxxxxdab t2.中等运行windows ap-southeast-1a 10.0.0.0 10.10.0.10 api-abc-prod-01 prod

如-->中顶部答案中所建议的那样,您可以使用jq执行此操作,请查看此处有关提取相关字段的教程

首先,AWS cli提供了指定输出格式的功能,因此您可以将输出设置为
text
,然后用空格替换新行。你可以试试

aws ec2 describe-instances --output text  --profile test --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running --output text | tr '\r\n' ' '
文本输出格式

文本格式将AWS CLI的输出组织为以制表符分隔的格式 线。它可以很好地与传统的Unix文本工具(如grep)配合使用, sed和awk,以及PowerShell执行的文本处理

文本输出格式遵循如下所示的基本结构。这个 列按相应的键名按字母顺序排序 底层JSON对象

因此,您可以使用
tr'\r\n''

或者您可以使用
awk

aws ec2 describe-instances --output text  --profile test --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running  | awk 1 ORS=' '
更新:

如果您想将ownerID附加到每个实例的详细信息中,那么请使用此选项

aws ec2 describe-instances --output text   --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running | paste -d" " - -


我尝试了
tr'\r\n'
awk 1 ORS=''
它以一行很长的一行返回了您提到的需要在一行中的输出?我的意思是,每个实例都显示在一行中,例如实例1 ownerid publicipaddress privateipaddress name\n实例2 ownerid publicipaddress privateipaddress非常有效,非常感谢。我稍微更正了它
aws ec2 description instances--output text--query'Reservations[*].[OwnerId,InstanceType,State.Name,Platform,Placement.AvailabilityZone,PublicIpAddress,PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0]]'--filter--filters Name=实例状态名,value=正在运行| paste-d“\t”-
aws ec2 describe-instances --output text   --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running | paste -d" " - -