「 bedtools 」提取上游+gene+下游序列

1、bed文件格式介绍

BED文件每行至少包括chrom,chromStart,chromEnd三列必选;另外还可以添加额外的9列可选,这些列的顺序是固定的(之前一直以为时第五列,由于共线性里面分析的格式的第五列是正负,一直造成误解,啊啊啊啊啊)。

必选的三列:
1.chrom - 染色体的名称(例如chr3,chrY,chr2_random)或支架(例如scaffold10671)。
2.chromStart - 染色体或支架中特征的起始位置。\color{red}{染色体中的第一个碱基编号为0}
3.chromEnd - 染色体或支架中特征的结束位置。所述 chromEnd碱没有包括在特征的显示。例如,染色体的前100个碱基定义为chromStart = 0,chromEnd = 100,并跨越编号为0-99的碱基。
9个可选的BED字段:
4.name - 定义BED行的名称。当轨道打开到完全显示模式时,此标签显示在Genome浏览器窗口中BED行的左侧,或者在打包模式下直接显示在项目的左侧。
5.score - 得分在0到1000之间。如果此注释数据集的轨迹线useScore属性设置为1,则得分值将确定显示此要素的灰度级别(较高的数字=较深的灰色)。此表显示 Genome Browser将BED分数值转换为灰色阴影:
6.strand - 定义strand。要么“。” (=无绞线)或“+”或“ - ”。
7.thickStart - 绘制特征的起始位置(例如,基因显示中的起始密码子)。当没有厚部分时,thickStart和thickEnd通常设置为chromStart位置。
8.thickEnd - 绘制特征的结束位置(例如基因显示中的终止密码子)。
blockStart位置。此列表中的项目数应与blockCount相对应。
9.itemRgb - R,G,B形式的RGB值(例如255,0,0)。如果轨道行 itemRgb属性设置为“On”,则此RBG值将确定此BED行中包含的数据的显示颜色。注意:建议使用此属性的简单颜色方案(八种颜色或更少颜色),以避免压倒Genome浏览器和Internet浏览器的颜色资源。
10.blockCount - BED行中的块(外显子)数。
11.blockSizes - 块大小的逗号分隔列表。此列表中的项目数应与blockCount相对应。
12.blockStarts - 以逗号分隔的块开始列表。应该相对于chromStart计算所有blockStart**位置。此列表中的项目数应与blockCount相对应。

2.bedtools提取序列

bedtools:
[ Genome arithmetic ] #基因组区间运算
intersect-查看两个文件不同区间是否有 overlap;
closest-#找到和目标区间最近的特征区间;
coverage-计算特定区间的覆盖深度;
map-针对存在交叠区间的 B 文件的某一列应用函数如说求和、均值
genomecov-计算在整个基因组的覆盖深度;
merge-将重叠的或相邻的区间合并成一个区域;
cluster-类似 merge,但是只是增加一列标记,用于标明哪些行是聚集在一起的;
complement-提供一个区间,然后获得此区间与整个基因组不重叠的区域;
subtract-类似 complement,不是针对基因组,而是针对两个区域,去除掉一
个区域与另一个区域重叠部分;
slop-根据已有特征区间向外延展,可分别指定上下游延伸长度;
flank-根据现有区间,指定侧翼延伸长度,得到两侧翼位置的新区间,不包含现有区间;
sort-对区域进行排序;
random-根据 genome 文件随机生成指定长度指定个数的区域;
annotate-从其他多个文件中统计指定区间的覆盖深度;

2.1 提取gff文件的所有基因位置,并转换成bed格式

\color{red}{注意事项}
bedtools起始坐标是0,注意$4-1,gff一般起始坐标是1。例如bedtolls写0-1提取的是0位的碱基,所以需要$4-1,(一般我们写0-1是想提取的是0和1位置的碱基)
convert2bed ,gff2bed 提取则直接是$4-1的结果。


###将标准注释gff3文件转换得到bed格式的gff文件
###方法1  #调用的bedops,也可以自己
awk '{if($3~/^gene$/)print}' EVM.gff3 > genes.gff && convert2bed  --input=gff --output=bed  < gene.gff >genes.bed #调用的bedops,也可以自己用awk
awk '{if($3~/^gene$/)print}' EVM.gff3 > genes.gff && gff2bed <genes.gff> genes.bed #结果同上
###方法2
less EVM.final.gene.gff3 |grep -w gene|awk '{print$1"\t"$4-1"\t"$5"\t"$9"\t"".""\t"$7}'  >genes.gff

\color{red}{注意事项}:bedtools起始坐标是0,注意$4-1,gff一般起始坐标是1。例如bedtolls写0-1提取的是0位的碱基,所以需要$4-1,(一般我们写0-1是想提取的是0和1位置的碱基)
convert2bed 提取则直接是$4-1的结果。

bed格式效果如下:
scaffold10018_cov214    9657    10808   ID=Mimpu10018S00001     .  -
scaffold1001_cov228     131443  132576  ID=Mimpu1001S00002      .  +
scaffold1001_cov228     134493  139136  ID=Mimpu1001S00003      .  -
scaffold1001_cov228     38129   38701   ID=Mimpu1001S00004      .  +
scaffold10020_cov190    52371   53006   ID=Mimpu10020S00005     .  +
scaffold10020_cov190    72945   74067   ID=Mimpu10020S00006     .  -
scaffold10020_cov190    171722  173389  ID=Mimpu10020S00007     .  +
scaffold10020_cov190    137289  137993  ID=Mimpu10020S00008     .  -

2.2 计算染色体长度
samtools faidx ../01.data/03.Assembly_final/final.genome.fasta
cut -f 1,2 ../01.data/03.Assembly_final/final.genome.fasta.fai >final.genome.fasta.len
2.3 创建包含promoter位置的bed文件,up or down位置

\color{red}{注意事项}
slop-根据已有特征区间向外延展,可分别指定上下游延伸长度;
flank-根据现有区间,指定侧翼延伸长度,得到两侧翼位置的新区间,不包含现有区间;
一般默认启动子区域应该是上下游2kb,最大不超过5kb。

#up or down 
# 提取基因上游3k 区间
bedtools flank -i genes.bed -g final.genome.fasta.len  -l 3000 -r 0 -s > up_3k.promoters.bed
# 提取基因下游2k的区间
bedtools flank -i genes.bed -g final.genome.fasta.len  -l 0 -r 2000 -s > down_2k.promoters.bed
# 提取基因上游3k,下游2k区间
bedtools flank -i genes.bed -g final.genome.fasta.len  -l 3000 -r 2000 -s > up_down.promoters.bed

一起提取 up+gene+down序列,放在一条序列中,重点!!!我也不理解做启动子预测为什么要把基因序列加进去,但是有些人就喜欢这样,既然如此就满足各方需求。

#提取up+gene+down区间
bedtools slop  -i genes.bed -g final.genome.fasta.len  -l 3000 -r 2000 -s > up_3k.promoters.slop.bed
#### 参数说明
# -l 基因起始位置前多少bp
# -r 基因后多少bp
# -s 考虑正负链
2.4 根据bed中的位置信息,在基因组序列中提取指定序列

结果1:分上下游提取。
结果2:上下游一起提取,fa文件中id会一致。
结果3:提取上游+gene+下游。

#分上下游提取:结果1示例cmd
bedtools getfasta -s -fi ../01.data/03.Assembly_final/final.genome.fasta -bed up_3k.promoters.bed -fo up_3k.promoters.fa -name
bedtools getfasta -s -fi ../01.data/03.Assembly_final/final.genome.fasta -bed down_2k.promoters.bed -fo down_2k.promoters.fa -name
#上下游一起提取,fa文件中id会一致:结果2示例cmd
bedtools getfasta -s -fi ../01.data/03.Assembly_final/final.genome.fasta -bed up_down_2k.promoters.bed -fo down_2k.promoters.fa -name
#提取上游+gene+下游,重点:结果3示例cmd
bedtools getfasta -s -fi ../01.data/03.Assembly_final/final.genome.fasta -bed up_3k.promoters.slop.bed -fo J493.up_genes_down.fa -name

#提取gene序列,不考虑延长基因坐标左右的边位置。
bedtools getfasta -s -fi ../01.data/03.Assembly_final/final.genome.fasta -bed genes.bed -fo genes.fa -name

###参数说明:
-name 显示名字,即bed的第四列的名字。不写则显示坐标的范围
-s strand #考虑正负链条
-fi 基因组fa文件
-bed 准备好的bed格式文件
-fo 输出文件名 

\color{red}{注意事项}:如果超过坐标范围,bedtools会自己将坐标写到可提取到的坐标,如起始为0,末尾不足想要的长度时,提取的序列会用小写提示。

2.5 包装成shell
export PATH=/share/nas1/pengzw/software/bedops-v2.4.38/bin/:$PATH
#step0:数据准备
gff=Chr_genome_final_gene.gff3
genome=Lachesis_assembly_changed.fa
fai=Lachesis_assembly_changed.fa.fai
#step1:将标准注释gff3文件转换得到bed格式的gff文件
convert2bed  --input=gff --output=bed  < $gff >all.bed && awk '{if($8~/^gene$/)print}' all.bed  >genes.bed
#awk '{if($3~/^gene$/)print}' $gff > genes.gff && gff2bed <genes.gff> genes.bed #结果同上

#step2准备基因组长度文件
#samtools faidx $genome >fai
cut -f 1,2 $fai >genome.len
len=genome.len

#step3:getfasta
#flank 分别提取上游,下游序列,因为写在仪器,id会一样,无法区分上下游
l=2000
r=2000
bedtools flank  -i genes.bed -g $len -l $l -r 0 -s > up.flank.bed
bedtools getfasta -s -fi $genome -bed up.flank.bed -fo up.gene.flank.promoter.fa -name 

bedtools flank  -i genes.bed -g $len -l 0 -r $r -s > down.flank.bed
bedtools getfasta -s -fi $genome -bed down.flank.bed -fo down.gene.flank.promoter.fa -name 
#slop 上下游延伸提取
l=2000
r=2000
bedtools slop  -i genes.bed -g $len -l $l -r $r -s > slop.bed
bedtools getfasta -s -fi $genome -bed slop.bed -fo all.gene.slop.promoter.fa -name

参考:
https://www.jianshu.com/p/9208c3b89e44

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

推荐阅读更多精彩内容