#!/usr/bin/perl use strict; use warnings; my $File1 = '...'; my $File2 = '...'; my $File3 = '...'; my %keep; { open(my $fh_keys, '<', $File1) or die("Can't open key file \"$File1\": $!\n); while (<$fh_keys>) { chomp; $keep{$_} = 1; } } { open(my $fh_in, '<', $File2) or die("Can't open input file \"$File2\": $!\n"); open(my $fh_out, '>', $File3) or die("Can't create output file \"$File3\": $!\n"); while (<$fh_in>) { my ($key) = /^[^|]*\|([^|]*)/; print $fh_out $_ if $keep{$key}; } }