use strict; use warnings; my @files = @ARGV; my %table; foreach my $filename (@files) { open my $infile, '<', $filename or die $!; while( <$infile> ) { chomp; next unless $_; my( $name, $val ) = split; push( @{$table{ $name }}, $val ); } } my @names = sort keys %table; my $output = join "\t", "NAME\t", @files; foreach my $entry ( @names ) { $output .= join "\t\t", "\n$entry", @{$table{$entry}}; } $output .= map { local $" = "\t\t"; "@{$table{$_}}\n"; } @names; print $output, "\n";