ID1 ID2 dN dS Omega Label_ID1 Label_ID2 Group AVP78042 AVP78031 0.0059 0.1188 0.0500 SARSr-bat-CoV SARSr-bat-CoV Intra ATO98108 AVP78031 0.1373 1.4673 0.0936 SARSr-bat-CoV SARSr-bat-CoV Intra ATO98108 AVP78042 0.1371 1.4224 0.0964 SARSr-bat-CoV SARSr-bat-CoV Intra #### Distance ID_1 ID_2 Value DISTANCE AVP78042.1 ATO98108.1 0.29731 DISTANCE AVP78042.1 ATO98120.1 0.29281 DISTANCE AVP78042.1 ATO98132.1 0.33095 #### use strict; use warnings; use feature qw{ say }; sub load { my ($file, $table, $phase) = @_; open my $in, '<', $file or die "$file: $!"; while (<$in>) { chomp; my @columns = split /\t/; my $id = join '_', @columns[0, 1]; die "Duplicate $id." if 'first' eq $phase && exists $table->{$id}; push @{ $table->{$id} }, $columns[2]; say join "\t", @columns[0, 1], @{ $table->{$id} } if 'print' eq $phase; } } my %table; my $phase = 'first'; while (my $file = shift @ARGV) { load($file, \%table, $phase); $phase = 1 == @ARGV ? 'print' : ''; } #### ID1 ID2 dN dS Omega Value Label_ID1 Label_ID2 Group AVP78042 AVP78031 0.0059 0.1188 0.0500 0.29731 SARSr-bat-CoV SARSr-bat-CoV Intra ATO98108 AVP78031 0.1373 1.4673 0.0936 - SARSr-bat-CoV SARSr-bat-CoV Intra