AWS CLI将输出加载到多行

时间:2020-07-27 06:36:54

标签: amazon-web-services aws-cli

我正在使用aws cli以.csv格式提供一些我需要的输出。

下面显示了我整理的命令:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[VpcId, SubnetId, InstanceId, InstanceType, ImageId, State.Name, LaunchTime, Placement.AvailabilityZone, Placement.Tenancy, PrivateIpAddress, PrivateDnsName, PublicDnsName,[Tags[?Key==`Name`].Value],[Tags[?Key==`PowerData`].Value] ]' --output text | sed -E 's/\s+/,/g'

由于某种原因,最后两个信息“名称”和“ PowerData”以单独的行结尾。当我在电子表格中打开格式时,这会搞砸我的格式。

任何人都对导致该问题的原因或我如何解决该问题有任何想法?

1 个答案:

答案 0 :(得分:2)

原因是TAG返回数组,因此您需要在TAGs索引上打印唯一的值才能在一行上显示aws ec2 describe-instances --output json --query 'Reservations[*].Instances[*].Tags[]' 。 您可以验证

    [
        {
            "Key": "Name",
            "Value": "demo"
        },
        {
            "Key": "PowerData",
            "Value": "demo"
        }
    ]

输出

Tags[?Key==`Name`].Value| [0]

所以您需要管道表达式

foo.*.bar | [0]

通过添加过滤器,我们可以将一个表达式的结果传递给另一个表达式,并对投影(或任何表达式)的结果进行运算。

表达:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[VpcId, SubnetId, InstanceId, InstanceType, ImageId, State.Name, LaunchTime, Placement.AvailabilityZone, Placement.Tenancy, PrivateIpAddress, PrivateDnsName, PublicDnsName,Tags[?Key==`Name`].Value| [0],Tags[?Key==`PowerData`].Value | [0] ]' --output text | sed -E 's/\s+/,/g'

jmespath-pipe-expressions

所以试试这个

{{1}}