in reply to Compare Partial Lines of 2 Text Files
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)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Compare Partial Lines of 2 Text Files
by Knoperl (Acolyte) on Jul 31, 2007 at 00:33 UTC | |
by GrandFather (Saint) on Jul 31, 2007 at 01:14 UTC |