my %data; open FILE, '<', 'gravity' or die; while( ) { my @fields = split ' ', $_; $data{ @fields[ 0, 1 ] } = \@fields; } close FILE; open FILE, '<', 'magnetics' or die; while( ) { my @fields = split ' ', $_; ## Pad the hash if we didn't see this date/time in the gravity file $data{ "@fields[ 0, 1 ]" } //= [ @fields[ 0,1 ], ('n/a') x 3 ]; push @{ $data{ "@fields[ 0, 1 ]" } }, @fields[ 2 .. $#fields ]; } close FILE; open FILE, '<', 'bathymetry' or die; while( ) { my @fields = split ' ', $_; ## Pad the hash if we've never seen it before) ## (??? == No of fields added by the magnetics) $data{ "@fields[ 0, 1 ]" } //= [ @fields[ 0,1 ], ('n/a') x ( 3 + ??? ) ]; ## We saw it in gravity, but not magnetics. push @{ $data{ "@fields[ 0, 1 ]" } }, ('n/a') x ??? if @{ $data{ "@fields[ 0, 1 ]" } } < 3 + ???; push @{ $data{ "@fields[ 0, 1 ]" } }, @fields[ 2 .. $#fields ]; } close FILE; for my $key ( sort keys %data ) { my $nFields = @{ $data{ $key } }; ## Pad: ??? === total number of fields push @{ $data{ $key } }, ('n/a') x ( ??? - $nFields ); print join "\t", @{ $data{ $key } }; }