如何使用perl实现ncbi基因组数据格式转换
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下如何使用perl实现ncbi基因组数据格式转换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!ncbi基因组数据格式转换大家都知道从ncbi下载的基因组数据与正常的基
千家信息网最后更新 2026年11月02日如何使用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安全错误
数据库的锁怎样保障安全
新华互联网科技
中关村互联网 科技集团
今日互联网科技
麻工互联网科技
苏州互联网科技贷款公司
融贸通互联网科技
互联网金融 科技创新
狮子座互联网科技培训
互联网金融科技委员会
互联网科技类展会
互联网科技公司需要的职位
科技与互联网的利与弊
中国互联网有什么科技含量
宝灵互联网科技有限公司
互联网科技大奖都有哪些公司
畅思互联网科技
互联网与数字科技关系
安徽零酒互联网科技有限公司
青岛易易互联网科技
平安好医生打造互联网科技医疗
互联网科技保险
金诺互联网科技
科技信息互联网
金融科技 互联网金融
上海喔噻互联网科技
互联网科技ppt模板
随着互联网科技发展
科技类公司包括互联网吗
每天都有哪些好的互联网科技
互联网的黑科技实验室