JQ字符串不能是CSV-Formatt

发布于 2025-02-11 09:39:16 字数 2643 浏览 0 评论 0原文

我正在使用AWS CMD AWS ELBV2 DIFDAC-LOAD-BALANCERS-OUTPUT JSON检索有关我的负载平衡器的信息 - 下面

我使用以下来提取DNS名称,LB 的名称和方案

每个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打印为CSV,或者至少在每次迭代后插入一个空间循环?如果我不能通过JQ做到这一点,那么实现这一目标的最佳方法是什么?

当我添加@csv时,我会得到以下错误“ string(” xxxx ...)无法csv-formattert,只有数组“

partial 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"
        }
        ]
        }

I am working with JSON output from the AWS cmd aws elbv2 describe-load-balancers --output json to retrieve info about my Load Balancers - partial json below

I am using the following to extract DNS Name, LB Name and Scheme for each LB

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

The JQ loops over each array and I get a list like such

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

QUESTION: Is there a way in JQ to print my values as a CSV or at least insert a space after every iteration of the loop ? If I can't do it via JQ what is the best way to achieve this ?

When I add @csv I get the following error "string ("XXXX...) cannot be csv-formatted, only array"

Partial 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"
        }
        ]
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪意 2025-02-18 09:39:16

@csv期望一个数组,因此在其中构造

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

一个字段:或者,通过将字符串格式化为您的喜欢:

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

@csv expects an array, so construct one with your desired fields in it:

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

Alternatively, construct each output line yourself by formatting a string to your likings:

jq -r '.LoadBalancers[] | "\(.DNSName): \(.LoadBalancerName), \(.Scheme)"'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文