Parse the file containing the smaller number of lines and build a hash. Then parse the larger file and match lines using a hash lookup:
use strict; use warnings; my $file1 = <<FILE; applebananapearcarrotcarrotbeardeerdeer goatcowduckswanchickenmouseratbirdmouse chocolatedogdogfishmousecatdeerbird newyorkcalifornianewjerseymousecatdeerbird FILE my $file2 = <<FILE; monksbicyclewindbikecars computercomputerprinters hellicopterairplaneshelf chocolatedogdogfishmouse printerprintermousecouch FILE my %f1Lines; open IN, '<', \$file1; while (<IN>) { my ($key, $tail) = m/(.{24})(.*)/; push @{$f1Lines{$key}}, [$tail, $.]; } close IN; open IN, '<', \$file2; while (<IN>) { my ($key, $tail) = m/(.{24})(.*)/; next unless exists $f1Lines{$key}; my @matches = @{$f1Lines{$key}}; print "Line $. of file2 ($key$tail) matches:\n"; print " line $_->[1] of file1 ($key$_->[0])\n" for @matches; } close IN;
Prints:
Line 4 of file2 (chocolatedogdogfishmouse) matches: line 3 of file1 (chocolatedogdogfishmousecatdeerbird)
In reply to Re: Compare Partial Lines of 2 Text Files
by GrandFather
in thread Compare Partial Lines of 2 Text Files
by Knoperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |