生信工具与原理NAD-seq

bedtools的使用技巧(持续更新)

2020-10-26  本文已影响0人  一只烟酒僧

参考链接(注意这个是旧版,但是写的很详细!):https://anjingwd.github.io/AnJingwd.github.io/2017/08/19/bedtools%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B%E8%AF%A6%E8%A7%A3/
参考链接:https://zhuanlan.zhihu.com/p/52322803

技巧一、使用bedtools bamtobed将bam文件转bed文件(基础)

参考:https://uteric.github.io/CHIPSEQ/bamtobed/

bedtools bamtobed -i SRR3022344.sorted.bam >test.bed

第一列:染色体位置
第二列:start
第三列:end
第四列:对应BAM文件的QNAME,包含测序平台,read name等信息
第五列:对应BAM文件的MAPQ,即比对质量
第六列:正负链
注意:
start1和start2起始坐标第一个碱基都为0,所以start=9, end=20表示碱基跨度是从第10位到第20位
染色体用.表示unknown;位置信息用-1表示unknown

image.png

技巧二、使用bedtools intersect计算两个或多个bed中的intersect区域(可接受多个文件类型bed/gff/vcf/bam)

 bedtools intersect [OPTIONS] -a <bed/gff/vcf/bam> -b <bed/gff/vcf/bam>

-wa参数可以报告出原始的在A文件中的feature
-wb参数可以报告出原始的在B文件中的feature
-c参数可以报告出两个文件中的overlap的feature的数量
-wo 返回overlap碱基数
-v 返回非overlap区间
-s 相同链上的feature


#例题请看参考链接!
注意,自己生成测试bed文件,都必须用tab键分割,否则会报错!!

案例一:包含着染色体位置的两个文件,分别记为A文件和B文件。分别来自于不同文件的染色体位置的交集是什么?

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 25

$ bedtools intersect -a A.bed -b B.bed

chr1 15 20

案例二:包含着染色体位置的两个文件,分别记为A文件和B文件。求A文件中哪些染色体位置是与文件B中的染色体位置有overlap.

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 25

$ bedtools intersect -a A.bed -b B.bed -wa

chr1 10 20

案例三:包含着染色体位置的两个文件,分别记为A文件和B文件。求A文件中染色体位置与文件B中染色体位置的交集,以及对应的文件B中的染色体位置.

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 25

$ bedtools intersect -a A.bed -b B.bed -wb

chr1 15 20 chr1 15 25

案例四(经用): 包含着染色体位置的两个文件,分别记为A文件和B文件。求对于A文件的染色体位置是否与文件B中的染色体位置有交集。如果有交集,分别输入A文件的染色体位置和B文件的染色体位置;如果没有交集,输入A文件的染色体位置并以’. -1 -1’补齐文件。

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 25

$ bedtools intersect -a A.bed -b B.bed -loj

chr1 10 20 chr1 15 25

chr1 30 40 . -1 -1

案例五: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,如果和B文件中染色体位置有overlap,则输出在A文件中染色体位置和在B文件中染色体位置,以及overlap的长度.

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 20

chr1 18 25

$ bedtools intersect -a A.bed -b B.bed -wo

chr1 10 20 chr1 15 20 5

chr1 10 20 chr1 18 25 2

案例六: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,如果和B文件中染色体位置有overlap,则输出在A文件中染色体位置和在B文件中染色体位置,以及overlap的长度;如果和B文件中染色体位置都没有overlap,则用’. -1-1’补齐文件

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 20

chr1 18 25

$ bedtools intersect -a A.bed -b B.bed -wao

chr1 10 20 chr1 15 20 5

chr1 10 20 chr1 18 25 2

chr1 30 40 . -1 -1

案例七: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,输出在A文件中染色体位置和有多少B文件染色体位置与之有overlap.

$ cat A.bed

chr1 10 20

chr1 30 40

$ cat B.bed

chr1 15 20

chr1 18 25

$ bedtools intersect -a A.bed -b B.bed -c

chr1 10 20 2

chr1 30 40 0

案例八(常用): 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,输出在A文件中染色体位置和与B文件染色体位置至少有X%的overlap的记录。

$ cat A.bed

chr1 100 200

$ cat B.bed

chr1 130 201

chr1 180 220

$ bedtools intersect -a A.bed -b B.bed -f 0.50 -wa -wb

chr1 100 200 chr1 130 201

#一个2G的bam文件约需要15-20分钟!!!

注意:当用bedtools intersect 处理大文件时比较耗内存,有效的方法是对A和B文件按照染色体名字(chromosome)和位置(position)排序,重新intersect

bedtools sort [OPTIONS] -i <bed/gff/vcf>
bedtools sort -chrThenSizeA -i test.bed
        -sizeA                  Sort by feature size in ascending order.
        -sizeD                  Sort by feature size in descending order.
        -chrThenSizeA           Sort by chrom (asc), then feature size (asc).
        -chrThenSizeD           Sort by chrom (asc), then feature size (desc).
        -chrThenScoreA          Sort by chrom (asc), then score (asc).
        -chrThenScoreD          Sort by chrom (asc), then score (desc).

技巧三:使用bedtools genomecov染色体和全基因组覆盖度计算(可以用来做深度计算)

单个输入bed文件(-i指定)和genome files;如果输入为bam(-ibam指定)文件,则不需要genome files

bedtools genomecov [OPTIONS] -i <bed/gff/vcf> -g <genome>
 -ibam           The input file is in BAM format
                  Note: BAM _must_ be sorted by position

示例
$ cat ranges-cov-sorted.bed
chr1    4       9
chr1    1       6
chr1    8       19
chr1    25      30
chr2    0       20

$ cat cov.txt  (染色体及每条染色体总碱基数)
chr1    30
chr2    20

bedtools genomecov -i ranges-cov-sorted.bed -g cov.txt
chr1    0       7       30      0.233333 1
chr1    1       20      30      0.666667
chr1    2       3       30      0.1
chr2    1       20      20      1 2
genome  0       7       50      0.14 3
genome  1       40      50      0.8
genome  2       3       50      0.06
#name 覆盖次数 覆盖碱基数 总碱基数   覆盖度
#同时计算单染色体和全基因组覆盖度

如果输入的是-ibam bam 文件,则输出结果为
名称  覆盖次数  该次数下的碱基数 该染色体长度  染色体覆盖度
chr1    0       248951704       248956422       0.999981  
chr1    1       4136    248956422       1.66134e-05
chr1    2       582     248956422       2.33776e-06
chr2    0       242190850       242193529       0.999989
chr2    1       2358    242193529       9.73602e-06
chr2    2       321     242193529       1.32539e-06
chr3    0       198292860       198295559       0.999986
chr3    1       2398    198295559       1.20931e-05
chr3    2       301     198295559       1.51794e-06
chr4    0       190212444       190214555       0.999989
chr4    1       1622    190214555       8.52721e-06
chr4    2       489     190214555       2.57078e-06
chr5    0       181536919       181538259       0.999993
chr5    1       1280    181538259       7.05086e-06
chr5    2       60      181538259       3.30509e-07
chr6    0       170804532       170805979       0.999991
chr6    1       1095    170805979       6.41078e-06
chr6    2       352     170805979       2.06082e-06
chr7    0       159344307       159345973       0.99999


 chr1  248951704+4136+582=248956422 


2G的bam文件大概的时间消耗
real    3m29.649s
user    3m19.071s
sys     0m9.387s
genomecov也会对全基因组的按照不同深度做统计!!(有用啊)

-u Write the original A entry once if any overlaps found in B
注意-u参数,1、使用后相当于进入-wa模式,2、若A与B有相同重复,则会去重

image.png

技巧四、使用bedtools coverage计算染色体给定区间的深度和覆盖度,输入文件可以是bam

bedtools coverage [OPTIONS] -a <bed/gff/vcf> -b <bed/gff/vcf>
其中-a指定interval文件,即你想看的染色体区间  -b指定的是你比对的结果或bed等文件


示例
$ cat A.bed
chr1  0   100
chr1  100 200
chr2  0   100

$ cat B.bed
chr1  10  20
chr1  20  30
chr1  30  40
chr1  100 200

$ bedtools coverage -a A.bed -b B.bed
A的名称 起始 终止 B在A中匹配次数 匹配的总长度 该区域总长度  比例
chr1    0   100    3    30    100    0.3000000
chr1  100 200  1  100 100 1.0000000
chr2  0   100  0  0   100 0.0000000
结果解释:前三列是interval文件的信息,后四列为统计信息
上一篇下一篇

猜你喜欢

热点阅读