工欲善其事必先利其器
Bedtools是由犹他大学昆兰实验室开发的基因组算法工具集,用于广泛的基因组学分析任务。它堪称是基因组分析工具中的瑞士军刀。其设计灵活,可以轻松地与其他命令行工具集成,如 awk
、grep
、sort
等,使得它成为基因组研究和数据分析中不可或缺的工具之一。此外,bedtools
支持多种基因组数据格式,其中最常用的是 BED 格式,但也支持 VCF、GFF 和其他一些标准格式。由于其广泛的应用和功能,bedtools
成为了生物信息学家和基因组学者工具箱中的标准工具之一
题目:BEDTools: a flexible suite of utilities for comparing genomic features日期:2010-03-15期刊:Bioinformatics 作者&单位:Aaron Quinlan & 弗吉尼亚大学医学院生物化学与分子遗传学系DOI:https://doi.org/10.1093/bioinformatics/btq033
bedtools
是一个强大的生物信息学工具,它是一套用于比较基因组学特征的软件。这些工具允许进行广泛的基因组分析任务,包括寻找重叠的基因或基因组区域、计算覆盖率、寻找最近的基因组特征等。其具有众多子命令:
bedtools工具集
最简单
#codna create -n wes #先创建小环境,如果已经创建,可以忽略
conda activate wes
conda install -y bedtools
wget -c https://github.com/arq5x/bedtools2/releases/download/v2.31.1/bedtools-2.31.1.tar.gz
tar -xf bedtools-2.31.1.tar.gz
cd bedtools2/
make
解压后,bin文件夹下什么都没有,需要再执行一下编译 make
,然后就可以正常使用
bedtools 有众多子命令,下面我们来简单演示一些部分命令用法:
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/maurano.dnaseI.tgz
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/cpg.bed
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/exons.bed
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/gwas.bed
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/genome.txt
curl -O http://s3.amazonaws.com/bedtools-tutorials/web/hesc.chromHmm.bed
900K 12月 13 18:26 cpg.bed
4.0K 12月 13 18:38 demo_data
29M 12月 13 18:27 exons.bed
2.0K 12月 13 18:27 genome.txt
604K 12月 13 18:27 gwas.bed
24M 12月 13 18:32 hesc.chromHmm.bed
38M 12月 13 18:23 maurano.dnaseI.tgz
主要用于识别两个或多个BED/GFF/VCF文件之间相交的基因组区域。例如,如果你有一个包含特定基因位置的文件和一个包含转录因子结合位点的文件,你可以使用 bedtools intersect
来找出转录因子结合位点是否位于这些基因的区域内。这个命令在基因组注释、变异位点分析等方面非常有用。
如何找到两个或多个基因组数据集(例如BED文件)中重叠的区域
intersect图解
## 输出A和B有交集的区域
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed > a_int_b.txt
## 在有重叠区域,输出文件A中的原始特征
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -wa |head
## 在有重叠区域,输出文件A和文件B的原始特征
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -wa -wb |head
## 对文件A中的每个特征输出与文件B的重叠,如果没有重叠,则为B输出为NULL
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -loj |head
## 输出文件A和B的特征以及它们之间的碱基对重叠数量
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -wao |head
## 只输出文件A中重叠一次的特征
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -u |head
## 对文件A中的每个条目,输出与文件B重叠的次数
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -c |head
## 只输出文件A中不与文件B重叠的特征
bedtools intersect -a ./demo_date/cpg.bed -b ./demo_date/exons.bed -v |head
## A文件与一个或多个B文件取交集
bedtools intersect -a exons.bed -b cpg.bed gwas.bed hesc.chromHmm.bed -sorted | head
## 用标签标识,"A"文件(例如外显子)与多个"B"文件(例如CpG岛、GWAS SNPs和ChromHMM注释)相交时,每个交集来自哪个"B"文件
bedtools intersect -a ./demo_date/exons.bed -b ./demo_date/cpg.bed ./demo_date/gwas.bed ./demo_date/hesc.chromHmm.bed -sorted -wa -wb -names cpg gwas chromhmm |head -n 10000 |tail
将所有重叠的区间合并成一个单一的连续区间。比如ChIP-seq实验中的多个区间重叠时,这个命令可以把这些重叠的区间合并成一个大的连续区间。这对于简化数据集和减少复杂性是非常有用的
merge图解
注:为了合并算法可以非常快速地工作
bedtools merge
命令要求输入文件按染色体,然后按起始位置排序。如果未排序,将会报错
## 对bed文件排序
sort -k1,1 -k2,2n foo.bed > foo.sort.bed
## 合并重叠区间
bedtools merge -i ./demo_date/exons.bed |head
## 合并重叠区间,同时输出合并成新区间的原始区间数量
bedtools merge -i ./demo_date/exons.bed -c 1 -o count|head
-c #参数用于指定输入文件中你想要总结的列,
-o #参数定义了你希望应用到`-c`参数列上的操作
## 合并那些虽然不重叠但彼此接近的区间。例如,如果你想合并所有相距不超过1000个碱基对(bp)的特征区间,你可以使用 `-d 1000` 参数
bedtools merge -i ./demo_date/exons.bed -d 1000 -c 1 -o count|head
## 合并后,同时列出合并后区间包含的每个特征(例如外显子)的名称
bedtools merge -i ./demo_date/exons.bed -d 90 -c 1,4 -o count,collapse|head
找出在给定特征文件中没有“覆盖”的基因组区间。比方来说,如果你有一个记录了某转录因子结合位点的BED文件,使用 bedtools complement
可以帮助你识别出那些没有转录因子结合的基因组区域。这对于理解转录调控网络中的未被结合的区域非常有用。(注:前提需要提供一个基因组区间文件)
complement图解
bedtools complement -i ./demo_date/exons.bed -g ./demo_date/genome.txt |head
用于计算基因组覆盖率。它可以统计每个基因组位置被测序读段覆盖的深度,帮助理解测序实验的覆盖均匀性和发现潜在的覆盖空白区域 (输入文件也是需要先进行排序)
genomecov图解
bedtools genomecov -i ./demo_date/exons.bed -g ./demo_date/genome.txt |head
-d #生成的输出详细列出了每个位置的覆盖次数
-bg #输出BEDGRAPH格式,它合并连续的具有相同覆盖深度的区域
-bga #参数提供了类似于BEDGRAPH的输出,但是对于未覆盖的区域也会显示出来,覆盖次数为0
-d -split #参数考虑了剪接对覆盖度的影响,剪接或分裂的读段被计算在内
-bga -split #纳入剪接读段的考虑,并输出EDGRAPH格式,同样会显示未覆盖区域
以上只是bedtools众多功能的简单演示,更多用法可以查看:https://bedtools.readthedocs.io/en/latest/content/example-usage.html
参考: