#!/usr/bin/env perl use strict; use warnings; use autodie; my ($file1, $file2, $file3) = qw{ pm_11109568_file1.txt pm_11109568_file2.txt pm_11109568_file3.txt }; my %search; { open my $fh1, '<', $file1; while (<$fh1>) { my ($field1, $field4) = (split /:/)[0,3]; $search{$field1} = $field4; } } my $re_alt = join '|', keys %search; my $re = qr{(?:^|,)($re_alt)(?:,|$)}; { open my $fh3, '>', $file3; open my $fh2, '<', $file2; while (<$fh2>) { if (/$re/) { my $key = $1; my @fields = split /,/; $fields[5] = $search{$key}; print $fh3 join ',', @fields; } else { print $fh3 $_; } } }