#!/usr/bin/perl -w use strict; use Data::Dumper qw(Dumper); my @list_of_files = qw(file1.txt file2.txt); my %data; my $file_num = 0; my $Distance; foreach my $file_name (@list_of_files) { $file_num++; my $file = 'File'.$file_num; my $flag = 0; open FH, $file_name or die "Cannot open $file_name. $!"; while(){ chomp; if($_ =~ /\s*(\d+)\s*(\d+\.\d+)/){ $Distance=$1; $data{$Distance}{$file}{'Fuel_Consumption'}=$2; next; } } close FH; } print Dumper(\%data); my ($tmpDist,$tmpFile,$tempValue); print "Merged output\n"; foreach $tmpDist (sort{ $a <=> $b } keys( %data ) ) { print "$tmpDist"; foreach $tmpFile (sort{ lc($a) cmp lc($b) } keys( %{$data{$tmpDist}} ) ) { $tempValue=$data{$tmpDist}{$tmpFile}{'Fuel_Consumption'}; print "\t $tempValue"; } print "\n"; }