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