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

如何用jq将multiqc_data.json的指定统计数据转为TSV?

正确提取MultiQC统计数据为TSV的jq方案

你的问题出在直接对report_general_stats_data[1]使用@tsv——这个元素是嵌套结构(包含表头定义、样本行数据等),并非扁平化的样本统计集合,所以输出不符合预期。以下是针对不同场景的解决方法:

场景1:已知目标统计组的索引(比如你之前用的[1])

如果确定report_general_stats_data[1]是包含目标字段的统计组,用以下命令提取指定字段并生成标准TSV:

jq -r '
# 定义输出表头和要提取的字段
["sample_id", "filtering_result_passed_filter_reads", "pct_adapter"] as $headers
# 先输出表头行
| $headers | @tsv
# 遍历样本数据,提取对应字段并拼接内容
| . + "\n" + (.report_general_stats_data[1].rows | to_entries[] | [.key, .value.filtering_result_passed_filter_reads, .value.pct_adapter] | @tsv)
' multiqc_data.json > multiqc_data.tsv

场景2:不确定统计组索引,按字段自动匹配

如果不知道目标字段在哪个统计组里,可通过字段存在性自动定位,命令如下:

jq -r '
["sample_id", "filtering_result_passed_filter_reads", "pct_adapter"] as $headers
| $headers | @tsv
| . + "\n" + (.report_general_stats_data[]
    # 筛选包含目标字段的统计组
    | select(.rows | any(.[] | has("filtering_result_passed_filter_reads") and has("pct_adapter")))
    # 遍历每个样本的统计数据
    | .rows | to_entries[]
    | [.key, .value.filtering_result_passed_filter_reads, .value.pct_adapter] | @tsv)
' multiqc_data.json > multiqc_data.tsv

注意事项

  • 如果JSON中的字段名和示例有差异(比如大小写、前缀不同),需修改命令中对应的字段名。可先用jq '.report_general_stats_data[1].rows | .[]' multiqc_data.json查看样本的完整字段列表。
  • 如需提取更多字段,只需在$headers数组和后续的[]中添加对应的字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:25:07