$ 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,?