如何用单条JQ命令从大JSON文件提取数据生成合并CSV?
单条JQ命令生成合并CSV的解决方案
你可以用一条JQ命令直接提取所有需要的字段并生成合并后的CSV文件,无需手动拆分再合并。以下是具体实现:
完整命令
jq -r ' # 输出CSV表头 ["IP地址", "接口名称", "子网掩码", "VLAN ID"], # 遍历目标JSON层级 (.ServiceEngine[]?.data_vnics[]?.vlan_interfaces[] | # 暂存当前接口的名称和VLAN ID .if_name as $if_name | .vlan_id as $vlan_id | # 遍历当前接口下的每个网络配置 .vnic_networks[]?.ip | # 组合需要的字段为数组,转成CSV格式 [.ip_addr.addr, $if_name, .mask, $vlan_id] ) | @csv' config_AviCluster.json > config_AviCluster_merged.csv
命令说明
- 表头生成:先输出包含四个字段名称的数组,通过
@csv转为标准CSV表头行 - 层级遍历:依次遍历
ServiceEngine、data_vnics、vlan_interfaces三级结构,?符号会自动跳过缺失对应字段的条目,避免运行报错 - 字段暂存:把当前接口的
if_name和vlan_id存为变量,确保每个网络配置都能关联到所属的接口信息 - 字段组合:遍历每个接口下的
vnic_networks网络配置,提取IP地址和子网掩码,再和暂存的接口信息组合成数组,最后通过@csv转为符合规范的CSV行 - 输出文件:通过重定向
>将结果写入合并后的CSV文件
注意事项
@csv会自动处理字段中的特殊字符(如逗号、双引号),保证CSV文件的格式正确性- 如果JSON中存在部分字段缺失的情况,
?符号会跳过这些不完整的条目,不会影响其他有效数据的提取
内容的提问来源于stack exchange,提问作者asthmatic_weasel
相关产品推荐
相关产品推荐

