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

如何从BAM文件按基因组区域提取覆盖度≥20的A碱基?

解决方案

关于samtools的局限性

samtools没法直接完成你这两个任务——它能输出碱基覆盖度和reads中的碱基信息,但筛选覆盖度≥20的A碱基、结合基因组区域统计,必须搭配其他工具才能实现。

任务1:提取覆盖度≥20的A碱基数量

用samtools mpileup输出全基因组每个位点的覆盖度和碱基组成,再用awk筛选统计:

samtools mpileup -f reference.fa input.bam | awk '$4 >= 20 { count += gsub(/[Aa]/, "", $5) } END { print count }'
  • samtools mpileup -f reference.fa input.bam:输出每个基因组位点的详细信息,第4列是该位点的覆盖度,第5列是所有比对到该位点的碱基(大小写区分正负链,这里统一统计A/a)
  • awk部分:筛选覆盖度≥20的行,统计第5列中A/a的总数量

任务2:按基因组区域统计分布

需要先准备基因组区域注释文件(GTF/GFF格式),再结合bedtools完成:

  1. 先把任务1中筛选出的高覆盖A碱基位点输出为BED格式:
samtools mpileup -f reference.fa input.bam | awk '$4 >= 20 && ($5 ~ /[Aa]/) { print $1 "\t" ($2-1) "\t" $2 "\tA\t" $4 }' > high_cov_A_sites.bed
  1. 用bedtools intersect把位点和注释区域关联,再统计各区域的A碱基数量:
bedtools intersect -a high_cov_A_sites.bed -b annotation.gtf -wa -wb | awk '{print $10}' | sort | uniq -c
  • 注意:这里假设GTF文件的第10列是区域类型(比如exon、3'UTR等),实际要根据你的注释文件格式调整对应列数;如果是BED格式注释文件,直接调整列索引即可

更高效的替代工具

如果觉得命令行组合太繁琐,可以用deepTools的multiBamSummary结合注释文件快速统计区域覆盖情况,或者用bedtools coverage直接按区域计算覆盖度,但需要额外加碱基筛选的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:45:02