如何用jq提取Alias Items并与现有结果合并为单行输出?
修改jq命令提取CloudFront别名信息
现有如下jq命令及JSON数据:
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"
若要同时提取别名列表,得到如下格式的单行输出:
"EG3MOA,a***.cloudfront.net,'a.domain.tld,b.domain.tld'" "EG3MOB,b***.cloudfront.net,'c.domain.tld,d.domain.tld'"
可以修改jq命令为:
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
关键修改说明:
- 使用jq的字符串插值语法
"\(.字段名)"替代传统字符串拼接,让代码更简洁易读 - 通过
.Aliases.Items | join(",")将别名数组转换为逗号分隔的字符串 - 在bash环境中用
'\''插入单引号,确保输出中的别名列表被单引号包裹
内容的提问来源于stack exchange,提问作者khinester
相关产品推荐
相关产品推荐

