hi everyone,
Thanks for all replys about my question.
I know here are lots of perl experts.
it's amazing that someone can short
that long program into one line.
I am a perl newbie, i wonder
whether someone can explain what
these guys wrote(like what
Sudarshan Raghavan wrote
). I really can not understand.
Since this group called " perl beginners",
i hope i can get some explanations.
Tanks a lot.
kevin
jontn_swift wrote:
>This is a classic case for my favorite one-liner:
>
>perl -e'while(<>){print unless $seen{$_}++}' <infile >outfile
>
>
>
>
>
>On Wed, 02 Oct 2002 04:17:29 -0400, Sudarshan Raghavan wrote:
>
>
>
>>On Fri, 27 Sep 2002, waytech wrote:
>>
>>
>>
>>>hi,
>>>
>>>i want to remove duplicate lines from one file(original file), and save
>>>the result to another file.
>>>
>>>the origianl file like this:
>>>
>>>--------------------------------------------------------------------------------------------
>>>[EMAIL PROTECTED]
>>>[EMAIL PROTECTED]
>>>[EMAIL PROTECTED]
>>>[EMAIL PROTECTED]
>>>[EMAIL PROTECTED]
>>>[EMAIL PROTECTED]
>>>-------------------------------------------------------------------------------------------
>>>
>>>with each email address a line. I want to remove the duplicate
>>>lines(emais adresses) and
>>>
>>>save the result to a new file.
>>>
>>>I wrote a program , but it output nothing. can someome help ?
>>>
>>>Thanks a lot.
>>>
>>> kevin
>>>
>>>-------------------------------------------------------------------------------------------
>>>#!/usr/bin/perl -w
>>>#######################
>>>#Remove the duplicate line #
>>>#from a orginal file and save #
>>>#the result to a file. #
>>>#######################
>>>print "Enter the file that has duplicate lines.\n";
>>>$Dupli_file=<stdin>;
>>>chomp;
>>>
>>>
>>chomp by default works on $_, to chomp $Dupli_file you will have to say
>>chomp ($Dupli_file);
>>
>>
>>
>>>print "The file you select is '$Dupli_file'\n"; open
>>>(Dupli_file,"$Dupli_file");
>>>
>>>
>>When opening a file always check for failure like this open (Dupli_file,
>>$Dupli_file) or die "Cannot open $Dupli_file: $!\n"; $! will contain the
>>error string. For more info on $! (perldoc perlvar)
>>
>>
>>
>>>print "Please select the file you want to save the result to:\n";
>>>$Resu_file=<stdin>;
>>>chomp;
>>>
>>>
>>chomp ($Resu_file);
>>
>>
>>
>>>print "The result file is $Resu_file\n"; open
>>>(Resu_file,">$Resu_file");
>>>
>>>
>>Check for failure
>>
>>
>>
>>>while (<Dupli_file>)
>>>{
>>> $orin_line=$_;
>>> while (<Resu_file>){
>>>
>>>
>>You are trying to read from a filehandle that has been opened for
>>writing. This will throw a warning message.
>>
>>This logic will not work even if you open the result file for both
>>reading and writing. If the result file is empty to start with, the
>>execution path will never go into the while loop. while (<Resu_file>)
>>will fail the first time, which means nothing gets written into
>>Resu_file. This makes it fail again the 2'nd time, 3'rd time ...
>>
>>
>>
>>> if("$_" eq "$orin_line")
>>> {
>>> next;
>>> }
>>> print Resu_file "$orin_line";
>>> };
>>>}
>>>}
>>>
>>>
>>A hash is more suited for your job
>>#!/usr/bin/perl -w
>>use strict;
>>
>>chomp (my $dupli_file = <STDIN>);
>>chomp (my $res_file = <STDIN>);
>>
>>open (DUPLI, $dupli_file) or die "Failed to open $dupli_file: $!\n";
>>open (RESULT, ">$res_file") or die "Failed to open $res_file for
>>writing: $!\n";
>>
>>my %res_hash;
>>while (<DUPLI>) {
>> chomp;
>> unless ($res_hash{$_}++) {
>> print RESULT "$_\n";
>> }
>> }
>>close (DUPLI);
>>close (RESULT);
>>
>>
>
>
>