You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq转置数组元素生成DNS A记录所需键值对

用jq的map()和group_by()生成DNS A记录结构化数据

完全可以通过jq的map()和group_by()实现需求,下面分两种常用场景给出具体实现:

场景1:生成单FQDN对应单IP的独立条目

如果需要为每个FQDN单独生成一条对应IP的记录(即使同一FQDN对应多个IP),用map()配合字段展开即可:

jq命令

# 基于你已过滤Proxy非null、拆分FQDNList后的数组进行处理
map(. | {fqdn: .FQDNList[], ip: .IPAddress})

示例输入(过滤后的数据)

[
  {
    "InstanceId": "i-123456",
    "IPAddress": "192.168.1.10",
    "FQDNList": ["app1.example.com", "app2.example.com"],
    "Proxy": null
  },
  {
    "InstanceId": "i-789012",
    "IPAddress": "192.168.1.11",
    "FQDNList": ["app1.example.com", "app3.example.com"],
    "Proxy": null
  }
]

输出结果

[
  {"fqdn": "app1.example.com", "ip": "192.168.1.10"},
  {"fqdn": "app2.example.com", "ip": "192.168.1.10"},
  {"fqdn": "app1.example.com", "ip": "192.168.1.11"},
  {"fqdn": "app3.example.com", "ip": "192.168.1.11"}
]

场景2:按FQDN聚合所有对应IP

如果需要将同一FQDN的所有IP汇总成数组(适配DNS多IP A记录格式),可以在map()之后用group_by()分组:

jq命令

map(. | {fqdn: .FQDNList[], ip: .IPAddress}) 
| group_by(.fqdn) 
| map({fqdn: .[0].fqdn, ips: [.[].ip]})

输出结果

[
  {"fqdn": "app1.example.com", "ips": ["192.168.1.10", "192.168.1.11"]},
  {"fqdn": "app2.example.com", "ips": ["192.168.1.10"]},
  {"fqdn": "app3.example.com", "ips": ["192.168.1.11"]}
]

命令逻辑说明

  1. map(. | {fqdn: .FQDNList[], ip: .IPAddress}):遍历每个实例对象,将FQDNList中的域名逐个拆分,生成{fqdn, ip}的基础映射条目。
  2. group_by(.fqdn):按fqdn字段对所有条目分组,把同一域名的所有IP映射归为一组。
  3. map({fqdn: .[0].fqdn, ips: [.[].ip]}):将每组数据转换为“域名+IP数组”的结构,方便直接用于生成多IP的DNS A记录。

内容的提问来源于stack exchange,提问作者CDuv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:27:17