?
如果输入文件的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"; } ???