use strict; open FILE1, 'file1.txt' or die $!; open FILE2, 'file2.txt' or die $!; open NEW, '>new.txt' or die $!; my %lookup; while () { my ($key,$id) = split(/\s*:\s*/,$_); $lookup{$key} = $id; } while () { my @fields = split(/\s*:\s*/,$_); $fields[1] = $lookup{$fields[0]} || $fields[1]; print NEW join(' : ',@fields),"\n"; }