加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl里关于hash一个问题!

发布时间:2020-12-16 00:28:50 所属栏目:大数据 来源:网络整理
导读:? 如果输入文件的list文件格式如下: ????????? a.txt ????????? b.txt ????????? c.txt ??????????????????? …… ?而a.txt、 b.txt、 c.txt的格式如下的话: ????????? simulate1M 1708 INDEL:313 G GA 909 ????????? simulate1M 1744 INDEL:427 AT A 76 ?
?

如果输入文件的list文件格式如下:
????????? a.txt
????????? b.txt
????????? c.txt
??????????????????? ……

?而a.txt、 b.txt、 c.txt的格式如下的话:
????????? simulate1M 1708 INDEL:313 G GA 909
????????? simulate1M 1744 INDEL:427 AT A 76
????????? simulate1M 1804 INDEL:612 GCA G 62
????????? simulate1M 1934 INDEL:652 T TC 62
?? ……
将txt文件中第1、2、4、5列相同的最后一列相加;


实现程序:
??? 如果多维哈希时? $all{$info[1]}{$info[3]}{$info[4]} +=$num;
??? 请问$all{$info[1]} 存放的是什么呢?
??? 用这个多维哈希,应该怎么获取它的第二个键值呢? 用keys %{$all{$info[1]}} 好像不得行,那这个里面又存放的是什么呢?

?

#==============================================
最后只得用单值哈希解决了
use strict;
die "perl $0 VCF_LIST_FILE OUTFILE" if (@ARGV!=2);
?? my (%all);
?? open LIST,"$ARGV[0]" or die $!;
?? open OUT,">$ARGV[1]" or die $!;
?? while(<LIST>){
?????????? chomp;
?????????? open IN,$_ or die $!;
?????????? while(<IN>){
?????????????????? chomp;
?????????????????? if (/^#/){
?????????????????????????? next;
?????????????????????????? }else{
?????????????????????????????????? my @info=(split /s+/,$_);
?????????????????????????????????? my $key = "$info[1]t$info[3]t$info[4]";
?????????????????????????????????? print $key;
?????????????????????????????????? my $num=$info[-1];
?????????????????????????????????? $all{$key} +=$num;
?????????????????????????????????? }
?????????????????????????????????? }
???????????????? close IN;
??? }
??? close LIST;

for my $pos (keys %all){ ??????? print OUT "simulate1M $pos $all{$pos}n"; } ???

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读