#!/usr/bin/perl use strict; my $count = 0; my %line ={}; # ------------------------- create a uniq line hash
while( <> ) { #read from stdin one line or record at a time s/ipadd://; #if line has ipadd: remove it s/^ |\t//; #if any whitespace at the beginning of string rm next if ($_=~/^\s*(\*|$)/); #if line begins with a * print sort $_; $count ++; # Count $line{' $_'}=1; # ------------------------- create a key in the hash.. '1' is insignificant..may use define... } print "\n"; print "Total IP'S = $count\n"; $count=0; # -------------------- count and print them.. foreach my $key( keys %line ) { $count++; print "$key\n"; } print "Total IP'S = $count\n"; -----Original Message----- From: rmck [ mailto:[EMAIL PROTECTED] Sent: Thursday, March 18, 2004 12:44 PM To: [EMAIL PROTECTED] Subject: sort stdin and print HI I have a script that reads stdin from the output of another script and cleans it up and prints it. The script gets ip's. I would like to sort it and and eliminate duplicates count the sorted/unique ips then print??? I thought using the perl sort command would help but it did not... I could pipe the output to /bin/sort -u, but I wanted to do everthing in perl. Help if you can. #!/usr/bin/perl use strict; my $count = 0; while( <> ) { #read from stdin one line or record at a time s/ipadd://; #if line has ipadd: remove it s/^ |\t//; #if any whitespace at the beginning of string rm next if ($_=~/^\s*(\*|$)/); #if line begins with a * print sort $_; $count ++; # Count } print "\n"; print "Total IP'S = $count\n"; Current out: 111.222.81.97 111.222.81.97 111.111.135.11 Total IP'S = 3 Goal Out: 111.111.135.11 111.222.81.97 Total IP'S = 2 Thanks, rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] < http://learn.perl.org/> < http://learn.perl.org/first-response>