如何使用perl实现ncbi基因组数据格式转换
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,小编给大家分享一下如何使用perl实现ncbi基因组数据格式转换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!ncbi基因组数据格式转换大家都知道从ncbi下载的基因组数据与正常的基
千家信息网最后更新 2025年11月12日如何使用perl实现ncbi基因组数据格式转换
小编给大家分享一下如何使用perl实现ncbi基因组数据格式转换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
ncbi基因组数据格式转换
大家都知道从ncbi下载的基因组数据与正常的基因组数据有所不同,所有的基因转录本CDS的ID都是重新起的,用起来非常不方便,为此写了一perl脚本将其ID转换回来。
用法如下:
UsageForced parameter:-gff genoma gff filemust be given-fa genoma fasta file must be given-o output gff file must be given-out output fasta file must be givenOther parameter:-h Help document
代码如下:
use Getopt::Long;use strict;use Bio::SeqIO;use Bio::Seq;#get optsmy %opts;GetOptions(\%opts, "gff=s", "o=s", "fa=s", "out=s","h");if(!defined($opts{gff}) || !defined($opts{o}) || !defined($opts{fa}) || !defined($opts{out}) || defined($opts{h})){print <<"Usage End.";UsageForced parameter:-gff genoma gff file must be given-fa genoma fasta file must be given-o output gff file must be given-out output fasta file must be givenOther parameter:-h Help documentUsage End.exit;}open(IN,"$opts{gff}") || die "open $opts{gff} failed\n";open(OUT,">$opts{o}") || die "open $opts{o} failed\n";my %chr;my %gene;my %gene_mrna_num;my %mrna;my %mrna_exon_num;while(){if(/^#/){print OUT $_;next;}chomp;my @line = split("\t");###########################################################################if($line[2] eq "region"){if($line[8] =~/chromosome/){$line[8] =~ /chromosome=([^;]*)/;my $chromosome = $1;$chr{$line[0]} = $chromosome;}else{$chr{$line[0]} = $line[0];}}###########################################################################if($line[2] eq "gene"){$line[8] =~ /ID=([^;]*);Name=([^;]*)/;my $geneid = $1;my $genename = $2;$line[8] =~ s/$geneid/$genename/;$gene{$geneid} = $genename;$gene_mrna_num{$geneid} = 0;}###########################################################################if($line[2] eq "mRNA"){$line[8] =~ /ID=([^;]*);Parent=([^;]*)/;my $mrnaid = $1;my $geneid = $2;$line[8] =~ s/$geneid/$gene{$geneid}/;$gene_mrna_num{$geneid}++;$line[8] =~ s/$mrnaid/$gene{$geneid}\.$gene_mrna_num{$geneid}/;$mrna{$mrnaid} = "$gene{$geneid}.$gene_mrna_num{$geneid}";$mrna_exon_num{$mrnaid} = 0;}###########################################################################if($line[2] eq "exon"){$line[8] =~ /ID=([^;]*);Parent=([^;]*)/;my $exonid = $1;my $mrnaid = $2;$mrna_exon_num{$mrnaid}++;$line[8] =~ s/$mrnaid/$mrna{$mrnaid};Name=$mrna{$mrnaid}\.exon$mrna_exon_num{$mrnaid}/;$line[8] =~ s/ID=$exonid;//;}###########################################################################if($line[2] eq "CDS"){$line[8] =~ /ID=([^;]*);Parent=([^;]*)/;my $cdsid = $1;my $mrnaid = $2;$line[8] =~ s/$mrnaid/$mrna{$mrnaid}/;$line[8] =~ s/$cdsid/$mrna{$mrnaid}/;}$line[0] = $chr{$line[0]};print OUT join("\t",@line)."\n";}close(IN);close(OUT);my $in = Bio::SeqIO->new(-file => "$opts{fa}" , -format => 'Fasta');my $out = Bio::SeqIO->new(-file => ">$opts{out}" , -format => 'fasta');while ( my $seq = $in->next_seq() ) {#my($id,$sequence)=($seq->id,$seq->seq);my($id,$sequence,$desc)=($seq->id,$seq->seq,$seq->desc);my $newSeqobj = Bio::Seq->new(-seq => $sequence, -desc => $desc, -id => $chr{$id}, ); $out->write_seq($newSeqobj);} 看完了这篇文章,相信你对"如何使用perl实现ncbi基因组数据格式转换"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
基因
基因组
数据
格式
篇文章
不同
为此
代码
完了
更多
有所不同
知识
脚本
行业
资讯
资讯频道
频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网与科技有关的视频
方块前线连接服务器教程
网络技术的疫情
羿龙(北京)网络技术
阿里的数据库能开源吗
中国科学引文数据库的收录范围
工行软件开发中心成都刘炼
数据库反斜杠
数据库链导数据
华为云服务器免费开通
页面点击查询显示数据库
闹闹互联网科技有限公司
销售软件开发好就业吗
信息系统组数据库技术
android与数据库的关系
域控服务器做域账户密码锁定策略
嵌入式软件开发(云平台)
dcs系统网络安全评价
家里网络安全性
新生网络安全
网络技术的疫情
康姆猫互联网科技怎么样
网络安全秘钥是不是wifi密码
手游狂野飙车8服务器设在哪里
网络安全奇点
ecotect气象数据库
中国科学引文数据库的收录范围
与服务器连接不稳定
服务器湿度过高危险吗
以太坊数据库