【问题标题】:Use jq to extract sublist into a single line使用 jq 将子列表提取到一行
【发布时间】:2022-12-04 06:28:56
【问题描述】:

从,

jq '.DistributionList.Items[] | select(.Aliases.Items != null) | .Id + "," + .DomainName' << EOF
{
"DistributionList": {
    "Items": [
        {
        "Id": "EG3MOA",
        "Status": "Deployed",
        "LastModifiedTime": "2022-12-03T19:32:35.007000+00:00",
        "DomainName": "a***.cloudfront.net",
            "Aliases": {
                "Quantity": 1,
                "Items": [
                "a.domain.tld",
                "b.domain.tld"
                ]
            }
        },
        {
        "Id": "EG3MOB",
        "Status": "Deployed",
        "LastModifiedTime": "2022-12-03T19:32:35.007000+00:00",
        "DomainName": "b***.cloudfront.net",
            "Aliases": {
                "Quantity": 1,
                "Items": [
                "c.domain.tld",
                "d.domain.tld"
                ]
            }
        }
    ]
    }
}
EOF

它产生:

"EG3MOA,a***.cloudfront.net"
"EG3MOB,b***.cloudfront.net"

我怎样才能得到 `Alias Items,这样我就有了:

"EG3MOA,a***.cloudfront.net,'a.domain.tld,b.domain.tld'"
"EG3MOB,b***.cloudfront.net,'c.domain.tld,d.domain.tld'"

【问题讨论】:

    标签: bash amazon-web-services jq


    【解决方案1】:

    要提取 Aliases.Items 数组并将其组合成单个字符串,可以使用 jq 中的 join() 方法。例如,这个 jq 过滤器将提取 Id、DomainName 和 Aliases.Items 值并将它们组合成一个字符串,Aliases.Items 值用逗号连接在一起:

    jq '.DistributionList.Items[] | select(.Aliases.Items != null) | .Id + "," + .DomainName + ",'" + (.Aliases.Items | join(",")) + "'"
    

    以下是如何在命令中使用此过滤器的示例:

    jq '.DistributionList.Items[] | select(.Aliases.Items != null) | .Id + "," + .DomainName + ",'" + (.Aliases.Items | join(",")) + "'" << EOF
    {
    "DistributionList": {
        "Items": [
            {
            "Id": "EG3MOA",
            "Status": "Deployed",
            "LastModifiedTime": "2022-12-03T19:32:35.007000+00:00",
            "DomainName": "a***.cloudfront.net",
                "Aliases": {
                    "Quantity": 1,
                    "Items": [
                    "a.domain.tld",
                    "b.domain.tld"
                    ]
                }
            },
            {
            "Id": "EG3MOB",
            "Status": "Deployed",
            "LastModifiedTime": "2022-12-03T19:32:35.007000+00:00",
            "DomainName": "b***.cloudfront.net",
                "Aliases": {
                    "Quantity": 1,
                    "Items": [
                    "c.domain.tld",
                    "d.domain.tld"
                    ]
                }
            }
        ]
        }
    }
    EOF
    

    这应该输出以下内容:

    "EG3MOA,a***.cloudfront.net,'a.domain.tld,b.domain.tld'"
    "EG3MOB,b***.cloudfront.net,'c.domain.tld,d.domain.tld'"
    

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2022-06-14
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多