[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还有很多其它工具,就不一一整理了。在此次的学习基础上,遇到再看官网的介绍文档吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343