使用JQ从JSON文件中提取信息

vof42yt1  于 2022-10-04  发布在  Linux
关注(0)|答案(1)|浏览(266)

我目前有一个JSON文件,大约有15K行代码。我希望提取一些信息,可以单独使用下面的命令变成4个单独的CSV文件。我不知道是否可以将其简化为一条命令,以便将所有数据整齐地放入CSV。

这就是我到目前为止所拥有的。

jq -r '.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[]?.vnic_networks[].ip.ip_addr.addr' config_AviCluster.json > config_AviCluster.IP_address.csv
jq -r '.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[].if_name' config_AviCluster.json > config_AviCluster.Interface_Name.csv
jq -r '.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[]?.vnic_networks[].ip.mask' config_AviCluster.json > config_AviCluster.IP_Mask.csv
jq -r '.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[].vlan_id' config_AviCluster.json > config_AviCluster.vlan_ID.csv

这是4个单独的命令,然后我手动将CSV合并到一个文件中。这一点还能改进吗?如果是这样的话,任何建议和指导都将是很好的。

种类问候

nukf8bse

nukf8bse1#

从理论上讲,以下内容应该会创建一个包含新信息的新JSON结构。但需要一个样本数据集来准确测试它。

jq -r '.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[]|{ip_addr: .vnic_networks[].ip.ip_addr.addr, netmask: .vnic_networks[].ip.mask, iface: .if_name, vlan: .vlan_id}' config_AviCluster.json

输出

{
    "ip_addr": "0.0.0.0",
    "netmask": "255.255.255.0",
    "iface": "eth0",
    "vlan_id": "1"
}

相关问题