use warnings; use strict; my %fed; open my $fd, '<', 'file2' or die "open: $!"; $fed{$1}++ while <$fd> =~ m/^(\w+)\s/; close $fd; open $fd, '<', 'file1' or die "open: $!"; open my $fd2, '>', '/tmp/file1.tmp' or die "open: $!"; ## FIXME: tmpfile while (<$fd>) { m/^(\w+)\s+(\d+)$/; printf $fd2 "$1\t%d\n", exists $fed{$1} ? $2+1 : $2; } close $fd2; close $fd; rename '/tmp/file1.tmp', 'file1' or warn "rename: $!";