[Linux]bedtools学习

The BED format is a concise and flexible way to represent genomic features and annotations. bedtools是处理相关格式文件很方便的toolkits。简单学习下最常用的几个功能。
参考链接:https://bedtools.readthedocs.io/en/latest/index.html
http://quinlanlab.org/tutorials/bedtools/bedtools.html
关于生信分析常用的文件格式,UCSC网站整理的很全,详见http://genome.ucsc.edu/FAQ/FAQformat#format1,也算是一个意外收获。

1、About BED format

  • BED (Browser Extensible Data) format provides a flexible way to define the data lines that are displayed in an annotation track.
  • 简单来说,完整情况下,它是由12列数据组成。
    其中前3列数据是必须要有的required,后面9列为可选列optional。对于bedtools,大部分功能也仅需要前3列即可。


    bed format

    如上图

  • 第一列为track所在的染色体chromosome;
  • 第二列为 track starting position,注意是0-based,即染色体第一个碱基为0,第二个碱基为1;
  • 第三列为 track ending posion,与第二列不同,其为1-based计数,即染色体第一个碱基为1。
    因为第二、三列不同的计数方法,所以计算track width时直接第三列减第二列即可。
  • 第四列为track name名字;
  • 第五列为score;在UCSC的定义里为0-1000的BED score;在bedtools里更加灵活,可以储存为任何字符string。
  • 第六列一般描述正负链信息strand

其余六列不做介绍了,具体可参考开头的链接。

2、bedtools下载(linux)

#在自己合适的文件夹路径里下载安装
mkdir bedtools
ls
cd bedtools/
ls
wget https://github.com/arq5x/bedtools2/releases/download/v2.29.1/bedtools-2.29.1.tar.gz
ls
tar -zxvf bedtools-2.29.1.tar.gz
cd bedtools2
pwd
make

自己尝试发现,make编译完成后会将bedtools的bins命令自动添加到环境变量里,即在linux的任何路径下都可以使用bedtools的相关命令了。

3、bedtools常用工具

3.0 下载示例文件

mkdir bedtools-test
cd bedtools-test
curl -O https://s3.amazonaws.com/bedtools-tutorials/web/cpg.bed
curl -O https://s3.amazonaws.com/bedtools-tutorials/web/exons.bed
curl -O https://s3.amazonaws.com/bedtools-tutorials/web/gwas.bed
curl -O https://s3.amazonaws.com/bedtools-tutorials/web/genome.txt
curl -O https://s3.amazonaws.com/bedtools-tutorials/web/hesc.chromHmm.bed
ls -lh
head exons.bed

3.1 intersect

常见的就是比较两个bed文件的track记录是否有重叠,返回的结果根据不同的参数有不同的形式。要注意的两点是顺序性(a比b);局部/整体


intersect
(1)默认设置

只返回A track里的,与B track有重叠的区域。

bedtools intersect -a cpg.bed -b exons.bed | head -5
head cpg.bed
3.1-1
(2) -wa; -wb

上述只返回重叠区域,设置-wa; -wb可分别设置返回有重叠的、原始的A、B的track记录

bedtools intersect -a cpg.bed -b exons.bed -wa | head -5
head -5  cpg.bed
3.1-2
bedtools intersect -a cpg.bed -b exons.bed -wa -wb| head -5
  • -wo参数是在设置 -wa -wb的基础上再统计重复的序列长度。即分别返回有重复的、原始的A track与B track,以及重复的长度。
bedtools intersect -a cpg.bed -b exons.bed -wo | head -5
3.1-3
(3) -f 设定重叠标准
  • 上述情况默认只有两条track存在至少一个碱基以上的重复就认为是存在intersect。也可以设置进一步、严格的筛选标准
    -f num :设置重复长度占原始A track长度的多少才算是intersect
#设定标准为50%
bedtools intersect -a cpg.bed -b exons.bed -wo -f 0.50 | head
(4) -c 统计重叠数目

a文件的某条track可能与b文件的多条track存在重叠可能,-c参数可以统计计算

bedtools intersect -a cpg.bed -b exons.bed -c | head
bedtools intersect -a cpg.bed -b exons.bed -wa -c -f 1| head
awk '$1 == "chr1" && $2 <=788863 && $3 >=789211 {print}' exons.bed
(5) -v 反选未发生重叠事件的A track
bedtools intersect -a cpg.bed -b exons.bed -v | head 
(6) -sorted 排序后更高效
  • 当提供的a、b文件是排序好的话,那么intersect功能的处理效率会提升很多,尤其对于大文件来说。
  • 这里的排序sorted.bed是指先按第一列染色体顺序从小到大排,再按第二列track的位点排序。简单的实现方式就是直接加加-sorted参数
#观察下述两种执行所消耗的时间
time bedtools intersect -a gwas.bed -b hesc.chromHmm.bed > /dev/null
time bedtools intersect -a gwas.bed -b hesc.chromHmm.bed -sorted > /dev/null

#当然也可以对input文件进行预先的sort处理
sort -k1,1 -k2,2n foo.bed > foo.sort.bed
(7) -b 一比多的情况

观察一个A bed文件与多个B bed文件的重叠情况,返回的一个结果里

bedtools intersect -a exons.bed -b cpg.bed gwas.bed hesc.chromHmm.bed -sorted | head
#第6列表示a track与哪一个 b track的重叠情况
bedtools intersect -a exons.bed -b cpg.bed gwas.bed hesc.chromHmm.bed -sorted -wa -wb \
  | head -10000 \
  | tail -10
#把第六列的序号ID换成文件名,更容易观察
bedtools intersect -a exons.bed -b cpg.bed gwas.bed hesc.chromHmm.bed -sorted -wa -wb -names cpg gwas chromhmm \
  | head -10000 \
  | tail -10

3.2 merge

  • merge与intersect最明显的不同是merge只需要一个input bed文件
  • merge主要实现的是track的拼接,一般指的是有重叠的。可以理解为把存在交集的多个序列合并为一个最长的全集序列。
  • 结合其功能,merge的input文件必须要是排序好的
sort -k1,1 -k2,2n foo.bed > foo.sort.bed
merge
(1)基础用法 -i 指明input
head -10 exons.bed
bedtools merge -i exons.bed | head 
3.2-1
(2) -c -o参数统计merge数
  • -c 1 -o count返回结果(第四列)表示track是由多少条原始track合并而成的
bedtools merge -i exons.bed -c 1 -o count | head -6
3.2-2
  • -c 1,4 -o count,collapse则返回到具体的名字(第四列)
bedtools merge -i exons.bed -d 90 -c 1,4 -o count,collapse | head -6
3.2-3
(3) -d 放宽合并标准
  • merge合并默认的条件是track间有重叠;
  • 可以通过设置 -d num,指定相隔距离少于num的track也可以合并
bedtools merge -i exons.bed -d 1000 -c 1 -o count | head -20
bedtools merge -i exons.bed -c 1 -o count | head -20
3.2-4

3.3 complement

  • 如下图,可以简单理解为,某个bed文件相对于基因组的补集区域;
  • 不仅需要提供bed文件,还需要提供基因组染色体长度信息,可以脑补下为什么。


    complement
head genome.txt
bedtools complement -i exons.bed -g genome.txt > non-exonic.bed
head exons.bed
head non-exonic.bed

3.4 genomecov

  • 统计bed文件对于基因组的覆盖情况
  • 例如没有比对track到基因组的碱基有哪些;深度为1的有哪些...以此类推
  • 第四列为比例信息;此外也需要提供染色体长度信息


    genomecov
bedtools genomecov -i exons.bed -g genome.txt
#以染色体为单位计算的
  • 加上-bg参数,返回的称之为BEDGRAPH 文件格式,即本质还是bed;第四列为测序深度
bedtools genomecov -i exons.bed -g genome.txt -bg | head -10
3.4

bedtools还有很多其它工具,就不一一整理了。在此次的学习基础上,遇到再看官网的介绍文档吧。

你可能感兴趣的:([Linux]bedtools学习)