如何将特定JSON文件转换为关联进程PID的CSV文件
解决方案
你的问题在于当前命令把pid作为单独的数组输出,没有将其与每个连接条目关联起来,导致无法生成按进程ID对应所有连接的CSV。以下是正确的处理方式:
基础命令(输出带PID的连接数据)
cat sample.json | jq -r '.connections[] | [.process.pid, .src_ip, .dst_ip, .dst_port] | @csv'
命令说明:
.connections[]:遍历JSON中的connections数组,逐个处理每个连接对象[.process.pid, .src_ip, .dst_ip, .dst_port]:为每个连接构造包含进程ID和所需连接字段的数组(请根据connections实际存在的字段调整,比如添加src_port、state等)@csv:将数组格式化为标准CSV格式;-r参数让jq输出原始字符串,避免额外的JSON转义引号
带表头的版本
如果需要添加CSV表头,可先输出表头数组,再拼接数据行:
cat sample.json | jq -r '["PID", "源IP", "目标IP", "目标端口"], (.connections[] | [.process.pid, .src_ip, .dst_ip, .dst_port]) | @csv'
示例效果
假设你的sample.json结构如下:
{ "process": { "pid": 1234, "name": "nginx" }, "connections": [ { "src_ip": "192.168.1.10", "dst_ip": "8.8.8.8", "dst_port": 53, "state": "ESTABLISHED" }, { "src_ip": "192.168.1.10", "dst_ip": "1.1.1.1", "dst_port": 443, "state": "TIME_WAIT" } ] }
执行带表头的命令后,会输出:
"PID","源IP","目标IP","目标端口" "1234","192.168.1.10","8.8.8.8","53" "1234","192.168.1.10","1.1.1.1","443"
内容的提问来源于stack exchange,提问作者user3022917
相关产品推荐
相关产品推荐

