代码之家  ›  专栏  ›  技术社区  ›  eramm

JQ字符串不能为csv格式

  •  0
  • eramm  · 技术社区  · 2 年前

    我正在使用AWS cmd的JSON输出 aws elbv2 describe-load-balancers --output json 要检索有关我的负载平衡器的信息,请参阅下面的部分json

    我使用以下内容提取每个LB的DNS名称、LB名称和方案

    jq -r ' .LoadBalancers[]| .DNSName,.LoadBalancerName,.Scheme'

    JQ在每个数组上循环,我得到如下列表

    DNS-XXXXXXXXXXXXXXXXXXXXXXXX.elb.us-west-1.amazonaws.com
    LBNAME-xxxxxxxxx
    internal
    DNS-XXXXXXXXXX.elb.us-west-1.amazonaws.com
    LBNAME-XXXXXXXXXXXXXXXXXXXXXXXX
    internal
    

    问:在JQ中有没有一种方法可以将我的值打印为CSV,或者在循环的每次迭代后至少插入一个空格?如果我不能通过JQ做到这一点,那么实现这一点的最佳方法是什么?

    当我添加@csv时,我得到以下错误“字符串(“XXXX…)不能为csv格式,只能为数组“

    部分JSON

    "LoadBalancers": [
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-1:XXXXXXXXXXXXXXXXXXXXXXXX,
                "DNSName": "DNS-XXXXXXXXXXXXXXXXXXXXXXXX.elb.us-west-1.amazonaws.com",
                "CanonicalHostedZoneId": "xxxxxxxxx",
                "CreatedTime": "2021-10-24T07:37:29.568000+00:00",
                "LoadBalancerName": "LBNAME-xxxxxxxxx",
                "Scheme": "internal",
                "VpcId": "vpc-XXXXXXXXXX",
                "State": {
                    "Code": "active"
                },
                "Type": "network",
                "AvailabilityZones": [
                    {
                        "ZoneName": "us-west-1a",
                        "SubnetId": "XXXXXXXXXX,
                        "LoadBalancerAddresses": []
                    },
                    {
                        "ZoneName": "us-west-1c",
                        "SubnetId": "XXXXXXXXXX",
                        "LoadBalancerAddresses": []
                    }
                ],
                "IpAddressType": "ipv4"
            },
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-1:XXXXXXXXXXXXXXXXXXXXXXXX,
                "DNSName": "DNS-XXXXXXXXXX.elb.us-west-1.amazonaws.com",
                "CanonicalHostedZoneId": "XXXXXXXXXX",
                "CreatedTime": "2022-01-05T14:14:14.570000+00:00",
                "LoadBalancerName": "LBNAME-XXXXXXXXXXXXXXXXXXXXXXXX",
                "Scheme": "internal",
                "VpcId": "vpc-XXXXXXXXXX",
                "State": {
                    "Code": "active"
                },
                "Type": "network",
                "AvailabilityZones": [
                    {
                        "ZoneName": "us-west-1c",
                        "SubnetId": "subnet-XXXXXXXXXX",
                        "LoadBalancerAddresses": []
                    },
                    {
                        "ZoneName": "us-west-1a",
                        "SubnetId": "subnet-ZZZZZZZ",
                        "LoadBalancerAddresses": []
                    }
                ],
                "IpAddressType": "ipv4"
            }
            ]
            }
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   pmf    2 年前

    @csv 需要一个数组,因此在其中构造一个包含所需字段的数组:

    jq -r '.LoadBalancers[] | [.DNSName, .LoadBalancerName, .Scheme] | @csv'
    

    或者,通过按自己的喜好格式化字符串来构造每个输出行:

    jq -r '.LoadBalancers[] | "\(.DNSName): \(.LoadBalancerName), \(.Scheme)"'