in reply to Compare Partial Lines of 2 Text Files
this may be noticeably faster with large files; however, the perl regex engine is often so well optimized that, in the case of a simple regex like the one below, the actual code generated may actually be an unpack() call or something very like it!
three variations are presented; all produce the same output.
only the section of the code that differs is presented below.
(and, yes, you should have considered GrandFather's response more carefully before replying.)
use constant UNPACKER => 'A24 A*'; open IN, '<', \$file1; while (<IN>) { # my ($key, $tail) = m/(.{24})(.*)/; # my ($key, $tail) = unpack('A24 A*', $_); # my ($key, $tail) = unpacker(); my ($key, $tail) = unpack(UNPACKER, $_); push @{$f1Lines{$key}}, [$tail, $.]; } close IN; open IN, '<', \$file2; while (<IN>) { # my ($key, $tail) = m/(.{24})(.*)/; # my ($key, $tail) = unpack('A24 A*', $_); # my ($key, $tail) = unpacker(); my ($key, $tail) = unpack(UNPACKER, $_); 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; sub unpacker { unpack('A24 A*', $_) }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Compare Partial Lines of 2 Text Files
by Knoperl (Acolyte) on Jul 31, 2007 at 20:21 UTC |