如何用JQ从单个JSON文件生成两个CSV文件
单次解析JSON日志生成多个CSV文件的高效方案
当然可以!你完全没必要重复解析两次日志文件——用JQ结合shell的文件描述符重定向,就能在单次解析过程中同时生成两个CSV文件,既高效又省事,尤其适合处理大体积的JSON日志。
具体实现命令
直接用这条命令就能完成需求:
jq --raw-output ' # 生成types.csv的行并发送到文件描述符3 ([.id, .type] | @csv) >&3 # 生成groups.csv的行并发送到文件描述符4,用逗号分隔两个操作 , ([.id, .group] | @csv) >&4 ' testJQ.log 3>types.csv 4>groups.csv
命令解释
- 我们直接让JQ读取
testJQ.log文件,省去了多余的cat管道操作 - 对每个JSON对象,JQ只解析一次:
- 先提取
id和type字段生成符合CSV格式的行,通过>&3发送到文件描述符3 - 再提取
id和group字段生成CSV行,通过>&4发送到文件描述符4
- 先提取
- 命令末尾的
3>types.csv和4>groups.csv是shell的重定向操作,把对应的文件描述符内容写入到目标文件
执行结果验证
运行完命令后,你会得到两个符合预期的文件:
types.csv内容:1234,"A" 5678,"B"groups.csv内容:1234,"games" 5678,"cars"
这种方法避免了重复读取和解析大日志文件的开销,完美适配你的需求!
内容的提问来源于stack exchange,提问作者Kristian Sköld
相关产品推荐
相关产品推荐

