标签:tmp my geneInfo 数据处理 transcripts gff geneID mRNAID
Perl脚本练习
通过数组和哈希引用读取存储复杂数据
要求
gff文件,记录每个基因的名称、起始终止位置、染色体、转录本信息
数据
#注释行
分割:\t
9列:gff格式
思路
- 构建一个哈希,结构
my%gene = (
geneID => {
'location' => [chrs, start, end]
'transcripts' => [
{
'mRNAID' => 111,
'chr' => 111,
'start' => 111,
'end' =>111
}
]
}
)
- 按行读入gff,split,判断注释信息类型,如果为gene,将染色体和位置信息存入以基因ID命名的键中
- 如果为mRNA,捕获位置信息,ID和parent信息,根据parent信息将mRNA信息放入对应基因的键中
脚本
use Data::Dumper;
open IN, "D:/test.gff3" or die "$!";
my %geneInfo =();
while(my $line = <IN>){
chomp $line;
next if ($line = ~/^#/);
my@tmp = split (/\t/,$line);
if ($tmp[2] eq "gene"){
my $geneID = $tmp[-1] = ~/ID=([^;]+)/;
$geneInfo{$geneID}{'location'} = [$tmp[0], $tmp[3], $tmp[4]];
$geneInfo{$geneID}{'transcripts'} = [];
}
if ($tmp[2] eq "mRNA"){
my($mRNAID, $parentID) = ($tmp[-1]= ~/ID=([^;]+).*Parent=([^;]+)/);
push(@{$geneInfo{$geneID}{'transcripts'}}, {
"mRNAID"=>$mRNAID,
"chr"=>$tmp[0],
"start"=>$tmp[3],
"end"=>$tmp[4]
})
}
}
print Dumper (\%geneInfo);
for my$id(keys %geneInfo){
print "@{$geneInfo{$id}{'lication'}}\n";
if (@{$geneInfo{$id}{'transcripts'}}) >0){
print "$geneInfo{$id}{'transcripts'}->[0]->{mRNAID}\n";
}
}
标签:tmp,my,geneInfo,数据处理,transcripts,gff,geneID,mRNAID 来源: https://blog.csdn.net/ruby912/article/details/90789943
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。