use strict; use warnings; my @one_lines; open my $one,"<","file1.txt" or die $!; while (<$one>){ chomp; my (@fields)=split /:/; push @one_lines,{KEY=>$fields[0], F4=>$fields[3]}; } close $one; #------ open my $two,"<","file2.txt" or die $!; while (defined(my $line=<$two>)){ chomp $line; my @fields = split /,/,$line; my $matched_line={F4=>""}; for (@one_lines){ next unless $line=~m/$_->{KEY}/; $matched_line=$_; last; } $fields[5] = $matched_line->{F4} if $matched_line->{F4}; print join(",",@fields),"\n"; } close $two;