Jeff Pan wrote:
> hi,
Hello,
> Is there a best way to find some lines which exists in both two files?
Your code logic says that you want to find lines in '2.txt' that are NOT in
'1.txt'.
> Someone has show me a method but it seems a little low efficiency.
Not only that but it doesn't work correctly. If a line is not found in
'1.txt' then diff() will ALWAYS return 0.
> The code is as below:
>
> open (T1,"1.txt") or die "$!";
> open (T2,"2.txt") or die "$!";
>
> while(my $line=<T2>){
> chomp $line;
> print $line,"\n" unless diff($line);
> }
>
> sub diff
> {
> my $line=shift;
> my $ok=0;
> while(<T1>){
> chomp;
> if ($_ eq $line)
> {
> $ok=1;
> last;
> }
> }
> return $ok;
> }
>
> close T2;
> close T1;
The usual way to do this is to use a hash:
open T1, '<', '1.txt' or die "open '1.txt' $!";
open T2, '<', '2.txt' or die "open '2.txt' $!";
my %hash;
while ( <T2> ) {
$hash{ $_ }++
}
while ( <T1> ) {
print if exists $hash{ $_ }
}
__END__
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>