如何在Bash脚本中用jq将指定JSON转换为带合计列的CSV
使用jq将JSON转换为含合计列的CSV
原始JSON文件内容 (data.json)
{ "name": "john", "age": "22", "state": "Texas", "city": "Dallas", "dailysteps": 99, "weeklysteps": 2377, "monthlysteps": 330003 }
需求说明
通过Bash脚本中的jq工具完成以下操作:
- 仅提取
dailysteps、weeklysteps、monthlysteps三个字段 - 添加「总步数」列,值为上述三个字段的数值之和
- 输出包含自定义中文表头的CSV格式,最终效果匹配指定样式
实现命令
直接在Bash中执行以下命令即可:
jq -r ' ["每日步数", "每周步数", "每月步数", "总步数"] | join(", "), [.dailysteps, .weeklysteps, .monthlysteps, (.dailysteps + .weeklysteps + .monthlysteps)] | map(tostring) | join(" , ") ' data.json
命令解释
- 第一行通过数组定义CSV表头,再用
join(", ")转换成指定格式的表头行 - 第二部分先提取目标字段并计算三个步数的总和,用
map(tostring)把所有数值转为字符串,最后通过join(" , ")拼接成符合要求的内容行 -r参数让jq输出原始字符串,避免额外的JSON格式引号
最终输出
执行命令后将得到:
每日步数, 每周步数, 每月步数, 总步数 99 , 2377 , 330003 , 332479
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

