如何避免在jq代码中重复指定表头以将JSON转为带表头TSV
用jq生成带表头的TSV:仅指定一次表头的方法
当然可以!你只需要借助jq的变量功能来存储表头数组,就能避免重复写字段名称,让代码更简洁、易维护。
优化后的jq命令
$headers = ["h1", "h2"] $headers, (.[] | [.[$headers[]]]) | @tsv
代码解释
- 定义表头变量:用
$headers = ["h1", "h2"]把需要的表头字段存到变量里,只需要指定这一次。 - 输出表头:直接把
$headers作为第一个输出项,经过@tsv转换后就是TSV的表头行。 - 输出数据行:遍历输入的每个JSON对象(
.[]),用.[$headers[]]动态提取每个对象中对应表头字段的值,组成数组后再转成TSV格式。
测试效果
把你的输入JSON:
[ { "h1": "x1", "h2": "x2" }, { "h1": "y1", "h2": "y2" } ]
用上述jq命令处理后,会得到如下TSV结果:
h1 h2 x1 x2 y1 y2
这样以后如果需要调整表头字段或者顺序,只需要修改$headers数组就行,不用在多个地方重复修改,非常灵活。
内容的提问来源于stack exchange,提问作者user1424739
相关产品推荐
相关产品推荐

