ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

gff数据处理

2019-06-04 20:52:01  阅读:328  来源: 互联网

标签:tmp my geneInfo 数据处理 transcripts gff geneID mRNAID


Perl脚本练习

通过数组和哈希引用读取存储复杂数据

要求

gff文件,记录每个基因的名称、起始终止位置、染色体、转录本信息

数据

#注释行
分割:\t
9列:gff格式
在这里插入图片描述

思路

  1. 构建一个哈希,结构
my%gene = (
	geneID => {
		'location' => [chrs, start, end]
		'transcripts' => [
			{
				'mRNAID' => 111,
				'chr' => 111,
				'start' => 111,
				'end' =>111
			}
		]
	}
)
  1. 按行读入gff,split,判断注释信息类型,如果为gene,将染色体和位置信息存入以基因ID命名的键中
  2. 如果为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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有