转自:https://zhuanlan.zhihu.com/p/52322803
之前已经讲过BED 文件和它的衍生文件的格式,链接在这里:[数据格式] (2)BED 格式的四种写法 。
但是当我们想对两个或多个BED文件的区域求它们的交集,找它们之间的overlap时,就很麻烦。手动操作太痛苦,用awk也不是很合适。
Bedtools是Quinlan AR 和 Hall IM 在2010年发布在Bioinformatics上的工具,可以通过它对同一参考基因组的BED文件进行交,并,补集的操作,还有其他的功能,比如注释和格式转换,这篇主要讲利用 Bedtools 对BED格式的文件进行操作。
Bedtools的安装很简单,有conda用conda,没有conda可以去它的GitHub下载。 顺便说一下,Bedtools发布了它的python版本pyBedtools,对环境有洁癖的朋友也可以在Bedtools的GitHub网页上找到它,链接:arq5x/bedtools2
Bedtools的应用:
集合运算(注:都是链接,可以点开看详细转换方法):
1. 交集运算 intersect
不同参数结果输出不同的区域,A和B是输入的两个BED文件。不输入参数输出结果为两个BED文件的交集,-wa保留和b文件有重叠的全部A文件区域,-v 输出结果为-wa的补集,即B中没有A重叠的区域。可以用图表示为:
命令为:
bedtools intersect [OPTIONS] -a <FILE> \
-b <FILE1, FILE2, ..., FILEN>
#or
intersectBed [OPTIONS] -a <FILE> \
-b <FILE1, FILE2, ..., FILEN>
2. 并集运算 merge
将一个BED文件中所有的重叠区域和相邻merge为一个大的区域,可以将结果转换为其他格式的数据,可以通过参数设置相距多远的两个区域,可以取他们的并集:
命令为:
bedtools merge [OPTIONS] -i <BED/GFF/VCF/BAM>
#or
mergeBed [OPTIONS] -i <BED/GFF/VCF/BAM>
3. 补集运算 complement,找到基因组上所有和给定区域无重叠的区域:
命令:
bedtools complement -i <BED/GFF/VCF> -g <GENOME>
#or:
complementBed -i <BED/GFF/VCF> -g <GENOME>
4. 差集运算 subtract,用A中的区域减去B中的区域,通过参数-A可以实现有重叠区域的全部剔除:
命令:
bedtools subtract [OPTIONS] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
#or:
subtractBed [OPTIONS] -a <BED/GFF/VCF> -b <BED/GFF/VCF>
此外,还有类似于intersect的window,可以看区域上下游的重叠情况;cluster,类似于merge,将有重叠的区域归在一起,但是不会合并为一个大的区域。
附Bedtools的数据格式转换:
Bedtools还有很多很多的功能,它对于我们得到的数据非常有帮助,可以说是做二代测序人手必备的神器。
很幸运的是,Bedtools的说明书写的非常详细,链接:bedtools: a powerful toolset for genome arithmetic
最后补一句:多用sort,少点麻烦!