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

使用bcftools从多样本VCF生成按样本分类的变异位点表格

VCF转换为按样本分组的变异列表解决方案

你使用的原命令是按变异位点遍历,单条位点行会输出所有样本的ID和对应基因型,因此会出现样本ID重叠的问题,以下是可直接落地的解决方案:

方案1:bcftools+awk组合方案(无额外工具依赖)

先通过bcftools过滤出所有样本携带非参考等位基因的变异位点,输出「样本ID-变异位点」的一一对应单行记录,再用awk按样本ID合并行,直接生成符合要求的表格:

# 输出空格分隔的结果,完全匹配你给出的示例格式
bcftools query -f '%SAMPLE\t%CHROM:%POS:%REF:%ALT_%GT\n' -i 'GT!="0/0" && GT!="./."' 输入文件.vcf.gz | \
awk '{a[$1] = a[$1] " " $2} END {for(i in a) print i a[i]}' > 输出结果.txt

# 输出制表符分隔的tsv格式,更适合后续导入R分析
bcftools query -f '%SAMPLE\t%CHROM:%POS:%REF:%ALT_%GT\n' -i 'GT!="0/0" && GT!="./."' 输入文件.vcf.gz | \
awk '{if(a[$1]) a[$1] = a[$1] "\t" $2; else a[$1] = $2} END {for(i in a) print i "\t" a[i]}' > 输出结果.tsv

方案2:保留无变异样本的输出方案

如果需要把没有携带任何符合条件变异的样本也保留在输出结果中(单独占一行),可以先提取所有样本ID再合并结果:

# 提取全部样本ID存为临时文件
bcftools query -l 输入文件.vcf.gz > 样本列表.txt

# 生成包含所有样本的结果文件
bcftools query -f '%SAMPLE\t%CHROM:%POS:%REF:%ALT_%GT\n' -i 'GT!="0/0" && GT!="./."' 输入文件.vcf.gz | \
awk '{if(a[$1]) a[$1] = a[$1] "\t" $2; else a[$1] = $2} END {while((getline < "样本列表.txt") > 0) {if($0 in a) print $0 "\t" a[$0]; else print $0}}' > 全样本输出结果.tsv

注意事项

  • 如果你的VCF是分型相位明确的文件,可将过滤条件修改为GT!="0|0" && GT!=".|."适配
  • 输出的tsv文件导入R时可直接使用read.table("输出结果.tsv", sep = "\t", header = F, fill = T),fill参数会自动补全不同样本变异位点数量不一致导致的空列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:03