1. Combine rows
#!/usr/bin/perl -w ########################################################################################## #Goal:combine 1st column and count max, min and mean values for each following columns ########################################################################################## use strict; use Data::Dumper; use List::Util qw/max min sum/; my (%rec, $key, @vals); while (<DATA>) { chomp; ($key, @vals) = split; while (my ($i, $v) = each @vals) { push @{$rec{$key}->[$i]}, $v; } } print Dumper (\%rec); while (my ($key, $vals) = each %rec) { #while & each to go through %hash print $key, "\t"; while (my ($i, $v) = each @vals) { #while & each to go through @array my $max = max @{$rec{$key}->[$i]}; my $min = min @{$rec{$key}->[$i]}; my $sum = sum @{$rec{$key}->[$i]}; my $n = @{$rec{$key}->[$i]}; my $mean = $sum / $n; # 以下改变内部变量; $rec{$key}->[$i][0] = $max; # 求最大值; $rec{$key}->[$i][1] = $min; # 求最小值; $rec{$key}->[$i][2] = $mean; # 求平均值; print $rec{$key}->[$i][0]."/"; print $rec{$key}->[$i][1]."/"; print $rec{$key}->[$i][2]."\t"; } print "\n"; } __DATA__ a 2 3 1 3 2 2 s 2 2 2 2 2 3 s 1 2 3 1 2 1 b 3 2 2 1 5 2 a 2 3 3 5 2 4 s 6 8 4 9 2 5
Output:
$VAR1 = { 'a' => [ [ '2', '2' ], [ '3', '3' ], [ '1', '3' ], [ '3', '5' ], [ '2', '2' ], [ '2', '4' ] ], 'b' => [ [ '3' ], [ '2' ], [ '2' ], [ '1' ], [ '5' ], [ '2' ] ], 's' => [ [ '2', '1', '6' ], [ '2', '2', '8' ], [ '2', '3', '4' ], [ '2', '1', '9' ], [ '2', '2', '2' ], [ '3', '1', '5' ] ] }; a 2/2/2 3/3/3 3/1/2 5/3/4 2/2/2 4/2/3 b 3/3/3 2/2/2 2/2/2 1/1/1 5/5/5 2/2/2 s 6/1/3 8/2/4 4/2/3 9/1/4 2/2/2 5/1/3
没有评论:
发表评论