$ cat pm_11109568_file1.txt A:?:?:A4:? B:?:?:B4:? C:?:?:C4:? D:?:?:D4:? #### $ cat pm_11109568_file2.txt C,?,?,?,?,W6,? X,?,?,D,?,X6,? Y,?,?,?,?,Y6,B Z,?,?,?,?,Z6,? #### #!/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 $_; } } } #### $ cat pm_11109568_file3.txt C,?,?,?,?,C4,? X,?,?,D,?,D4,? Y,?,?,?,?,B4,B Z,?,?,?,?,Z6,?