使用 Perl为从 Ensemble 下载的基因序列添加外显子号

日常工作中,常常需要从 ensemble下载基因的外显子序列和 5‘和 3’UTR,用于设计引物和探针等。例如:BAP1

1. 查找人的 BAP1基因

search_BAP1(1).png

2. 选择人的BAP1基因

search_BAP1(2).png

3. 下载目标转录本对应的BAP1基因序列

download_BAP1(1).png

4. 下载BAP1序列

download_BAP1(2).png

5. 下载的序列特点,>开头,exon没有顺序号,有时为了拼接序列需要添加外显子号,手动添加容易出错,并且序列信息多的时候操作非常麻烦,因此编写perl脚本添加外显子号。

sequence_character_of_BAP1.png

6. perl脚本的思路为,">"所在的行为键,后续的基因序列为值,并且把基因序列中的换行符去掉(要同时考虑win、linux和mac来源文件的兼容性),具体代码如下。

#!/usr/bin/perl

use warnings;
use strict;

# 输入输出
open FILE, '<', "$ARGV[0]" or die "Could not open the file:$ARGV[0]\n$!";
open SAMPLE, '>', "$ARGV[1]" or die "Could not open the file:$ARGV[1]\n$!";
open OUT, '>', "$ARGV[2]" or die "Could not open the file:$ARGV[2]\n$!";

my $i = 0;
my ($str,$title);
my %title_seq;

while(my $file = ){
    $file =~ s/\r?\n//;    #去掉每行末尾的换行符/回车符
    unless($file){next;}    #跳过空行也可以写成 next if(/^\s+$/);
    if($file =~ m/^>(.+?)\s*$/){
        $i++;
        if($file =~ /exon:/){   
            $str = "exon". $i . ":";
            $file =~ s/exon:/$str/;
            $title = $file;
        }
        else{
            $title = $file;
        }
        print SAMPLE "$title\n";
    }
    elsif(defined $title){ # 建立哈希
    # 将这条序列的长度进行累加,直到遇到>或者文件尾
        $title_seq{$title} .= $file;
    }
}

close FILE;
close SAMPLE;

open IN, '<', "$ARGV[1]" or die "Could not open the file:$ARGV[1]\n$!"; 

while(){ # 按照title顺序输出哈希
    s/\r?\n//;
    unless($_){next;}
    if(exists $title_seq{$_}){
        print OUT "$_\n$title_seq{$_}\n";
    }
}

close IN;
close OUT;

7. 命令和结果

perl ensembl_gene_exon_number_dxl.pl Homo_sapiens_BAP1_001_sequence.fa title_of_BAP1 final_sequence_of_BAP1
7.1 title信息
title_of_BAP1.png
7.2 按照顺序添加外显子号之后的序列信息
exon_number_BAP1.png

你可能感兴趣的:(使用 Perl为从 Ensemble 下载的基因序列添加外显子号)