You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JQ将JSON中基因与通路数据展开为制表符分隔行

用JQ实现基因通路的TSV展开输出

当然可以用jq搞定这个需求!这刚好是jq最擅长的JSON数据拆分场景,我给你一步步拆解具体实现方法:

先明确输入JSON结构(假设你的数据格式如下)

首先我先模拟一下你提到的简化JSON数组结构,方便后续演示:

[
  {
    "genes_id": "b0001",
    "pathways": ["Glycolysis/Gluconeogenesis", "Pentose Phosphate Pathway"]
  },
  {
    "genes_id": "b0002",
    "pathways": ["Citrate Cycle (TCA Cycle)"]
  }
]

核心JQ命令

直接用这条命令就能生成你要的制表符分隔文件:

jq -r '.[] | .genes_id as $id | .pathways[] | [$id, .] | @tsv' input.json > output.tsv

命令各部分解释

  • -r:开启原始输出模式,避免给字符串加多余的JSON引号,生成干净的TSV内容
  • .[]:遍历JSON数组中的每一个基因对象
  • .genes_id as $id:把当前基因的ID存入变量$id,方便后续和每个通路条目绑定
  • .pathways[]:把当前基因的通路列表拆分成单独的条目
  • [$id, .]:将基因ID和单个通路条目组合成一个二元数组
  • @tsv:把二元数组转换成制表符分隔的字符串
  • > output.tsv:将结果输出到指定的TSV文件中

处理特殊情况(可选)

如果你的数据中存在pathways为null或者空数组的基因,可以加个容错处理,避免命令报错:

jq -r '.[] | .genes_id as $id | (.pathways // [])[] | [$id, .] | @tsv' input.json > output.tsv

这里的// []表示:如果pathways不存在或为空,就替换成空数组,这样空通路的基因就不会生成任何行。

最终输出效果

运行命令后,output.tsv的内容会是这样的(制表符分隔):

b0001	Glycolysis/Gluconeogenesis
b0001	Pentose Phosphate Pathway
b0002	Citrate Cycle (TCA Cycle)

内容的提问来源于stack exchange,提问作者CodeNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:30