#!perl use strict; use warnings; # ... open $IN1, "<", $infile1 or die "cannot open $infile1: $!\n"; open $IN2, "<", $infile2 or die "cannot open $infile2: $!\n"; open $OUT, ">", $outfile or die "cannot open $outfile: $!\n"; my %pair = (); while (<$IN1>) { chomp; s/^(\w+)\s+(\w+)$/$1 $2/; # just one space between keys $pair{$_} = 1; } while (<$IN2>) { chomp; s/^(\w+)\s+(\w+)$/$2 $1/; # swap keys if (exists $pair{$_}) { print $OUT "$_\n"; delete $pair{$_}; } } close $IN1; close $IN2; close $OUT;