use List::Util 'sum'; my @su_files = glob "SU*"; my @mu_files = glob "MU*"; @ARGV = ( @su_files, @mu_files ); my %data; while ( <> ) { my ( $key, $number ) = split /\t/; push @{ $data{ $key }{ lc substr $ARGV, 0, 2 } }, $number; } print join( "\t", 'Header', @su_files, 'average', @mu_files, 'average' ), "\n"; for my $key ( sort keys %data ) { my ( $su, $mu ) = @{ $data{ $key } }{ qw/ su mu / }; print join( "\t", $key, @$su, sum( @$su ) / @$su, @$mu, sum( @$mu ) / @$mu ), "\n"; }