我有以下 AWS CLI JSON 输出,其中包含实例 ID、IP 地址和来自我的 AWS 标签的一些其他值(所需 FQDN 的列表以及是否应该使用代理):
[
[
{
"InstanceId": "i-11111111111111111",
"ClusterName": "vpn",
"Ip": "192.168.0.1",
"FqdnList": "vpn.example.com",
"Proxy": null
}
],
[
{
"InstanceId": "i-22222222222222222",
"ClusterName": "sql",
"Ip": "192.168.0.2",
"FqdnList": "db.example.com;sql.example.com",
"Proxy": "nginx"
}
],
[
{
"InstanceId": "i-33333333333333333",
"ClusterName": "nginx",
"Ip": "192.168.0.3",
"FqdnList": "nginx.example.com;db.example.com;sql.example.com",
"Proxy": null
}
],
[
{
"InstanceId": "i-44444444444444444",
"ClusterName": "vpn",
"Ip": "192.168.0.4",
"FqdnList": "vpn.example.com",
"Proxy": null
}
],
[
{
"InstanceId": "i-55555555555555555",
"ClusterName": "nginx",
"Ip": "192.168.0.5",
"FqdnList": "nginx.example.com;db.example.com;sql.example.com",
"Proxy": null
}
]
]
我的最终目标是使用这个 JSON 来构建 DNS 记录列表A
(用于填充我们的 DNS 区域的另一个脚本),因此我尝试将其转置为一些更简单的内容,例如:
{
"vpn.example.com": [
"192.168.0.1",
"192.168.0.4",
],
"nginx.example.com": [
"192.168.0.3"
"192.168.0.5"
],
"db.example.com": [
"192.168.0.3"
"192.168.0.5"
],
"sql.example.com": [
"192.168.0.3"
"192.168.0.5"
]
}
或者
[
{
"name": "vpn.example.com",
"value": "192.168.0.1"
},
{
"name": "vpn.example.com",
"value": "192.168.0.4"
},
{
"name": "nginx.example.com",
"value": "192.168.0.3"
},
{
"name": "nginx.example.com",
"value": "192.168.0.5"
},
{
"name": "db.example.com",
"value": "192.168.0.5"
},
{
"name": "db.example.com",
"value": "192.168.0.3"
},
{
"name": "sql.example.com",
"value": "192.168.0.3"
},
{
"name": "sql.example.com",
"value": "192.168.0.5"
}
]
我已设法删除作为代理的项目(Proxy
!= null
,因为它们的地址已在代理的标签中重复)并使用以下方法从 FQDN 字符串创建一个数组:
jq '
.[].[]
| select(.Proxy | . == null)
| {
Ip: .Ip,
Fqdns: .FqdnList | split(";"),
}
'
得出:
{
"Ip": "192.168.0.1",
"Fqdns": [
"vpn.example.com"
]
}
{
"Ip": "192.168.0.3",
"Fqdns": [
"nginx.example.com",
"db.example.com",
"sql.example.com"
]
}
{
"Ip": "192.168.0.4",
"Fqdns": [
"vpn.example.com"
]
}
{
"Ip": "192.168.0.5",
"Fqdns": [
"nginx.example.com",
"db.example.com",
"sql.example.com"
]
}
但是,如何为数组中的每个项目“创建”行/项目Fqdns
?
我不确定这是否有可能jq
。
它可以通过 PHP/Python 脚本轻松完成,但我宁愿保持其“简单”。
map()
+能group_by()
像这个 SO 答案中那样有用吗?jq 中的“转置”对象