- 论坛徽章:
- 16
|
本帖最后由 tc1989tc 于 2015-11-29 20:38 编辑
- #!/bin/perl -w
- use strict;
- package T;
- sub new {
- my $class = shift;
- my $self = {};
- ${$self}{'allFiles'} = shift;
- #print "allfiles: ", ${$self{'allFiles'}}[0];
- return bless $self, $class;
- }
- sub load {
- my $self = shift;
-
- # load txt to hash, hash key is file names
- for my $file (@{${$self}{'allFiles'}}) {
- #print "file: ", $file, " \n";
- open(my $fh, $file) or die "open file fail\n";
- my %fileHash;
- while (<$fh>) {
- chomp ;
- (my $k, my $v) = split;
- $fileHash{$k} = $v;
- #print $k,$v;
- }
- close $fh;
- ${$self}{$file} = \%fileHash;
- }
- }
- sub uniqkey {
- my $self = shift;
-
- my @allkeys;
- for my $file (@{${$self}{'allFiles'}}) {
- my @lists = keys %{${$self}{$file}};
- push @allkeys, @lists;
- }
- my %hashkeys;
- %hashkeys = map {$_ => 1} @allkeys;
-
- # store keys
- ${$self}{'filekeys'} = [keys %hashkeys];
- }
- sub processfiles {
- my $self = shift;
- ${$self}{'result'} = {};
- # foreach keys
- for my $key (@{${$self}{'filekeys'}}) {
- my $strs= $key;
- # Check if exist in all files
- for my $file (@{${$self}{'allFiles'}}) {
- if (defined(${${$self}{$file}}{$key})) {
- $strs = join("\t",$strs, ${${$self}{$file}}{$key});
- } else {
- $strs = join("\t",$strs, 0);
- }
- }
- #print $strs, "\n";
-
- ${${$self}{'result'}}{$key} = $strs;
- }
- ${$self}{'TITLE'} = join("\t", 'NAME', @{${$self}{'allFiles'}});
- }
- sub printresult {
- my $self = shift;
- print ${$self}{'TITLE'}, "\n";
-
- for (keys %{${$self}{'result'}}) {
- print ${${$self}{'result'}}{$_}, "\n";
- }
- }
- my $files=['a.txt', 'b.txt', 'c.txt'];
- my $a = T->new($files);
- $a->load();
- $a->uniqkey();
- $a->processfiles();
- $a->printresult();
复制代码 ./test.pl
NAME a.txt b.txt c.txt
ABC 0 0 3.0
ACC 0 1.0 0
ATT 1.1 2.3 2.3
CTG 1.2 2.1 2.1
ATG 1.3 2.0 2.1 |
评分
-
查看全部评分
|