target1,48,12,7 target2,17,16,2 target3,22,6,1 #### target5,14,12,8,,3, target6,5,7,9,,,15 #### target1,,,,,,13 target2,,,,,,8 target4,,,,11,5,6 #### target1,,,,51,8 target2,,,,87,42 target4,22,3,7,, #### use strict; use warnings; print ("Now merging \n"); my $filenum = 0; my ( %row_val, %data ); foreach my $file ( sort glob("*.csv") ) { $filenum++; open my $fh, "<", $file or die $!; while ( my $line = <$fh> ) { chomp $line; my ( $row_val, @values ) = split /,/, $line; $row_val{$row_val} = 1; $data{$filenum}{$row_val} = \@values; } close $fh; } foreach my $row_val ( sort keys %row_val ) { print $row_val, ",", join( ",", map { $data{$_}{$row_val} ? @{ $data{$_}{$row_val} } : ",," } 1 .. $filenum ), "\n"; } #### target1,48,12,7,,,,,,,,,13,,,,51,8 target2,17,16,2,,,,,,,,,8,,,,87,42 target3,22,6,1,,,,,,,,, target4,,,,,,,,,,11,5,6,22,3,7 target5,,,,14,12,8,,3,,,,,, target6,,,,5,7,9,,,15,,,,,, #### target1,48,12,7,51,8,13 target2,17,16,2,87,42,8 target3,22,6,1,,, target4,22,3,7,11,5,6 target5,14,12,8,,3, target6,5,7,9,,,15