Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: Uniq and sort in perl

by johngg (Abbot)
on Jul 12, 2012 at 09:40 UTC ( #981347=note: print w/replies, xml ) Need Help??

in reply to Uniq and sort in perl

Utilitarian has given you a method of printing unique entries but if you also want to sort them then further steps will be required. Instead of printing in your while loop, declare an array outside of the loop and push your lines onto it inside the loop. You can then print your sorted unique lines afterwards. I use the inet_aton() from Socket to translate the IP numbers to a sortable string and use a Schwartzian Transform to do the sorting.

use strict; use warnings; use Socket; my @lines = split m{(?<=\n)}, <<EOD;,,,,,,,,,,,,,,,, EOD print do { my %seen; map { $_->[ 0 ] } sort { $a->[ 2 ] cmp $b->[ 2 ] || $a->[ 1 ] cmp $b->[ 1 ] } map { my @flds = split m{,\s*}; [ $_, $flds[ 0 ], inet_aton( $flds[ 1 ] ) ] } grep { not $seen{ $_ } ++ } @lines };

The output.,,,,,,,,

I hope this is helpful.



Replies are listed 'Best First'.
Re^2: Uniq and sort in perl
by slayedbylucifer (Scribe) on Jul 12, 2012 at 09:56 UTC
    Johngg, thanks for the response. your solution is way more detailed and I will definitely refer it in complex scripts where I would need sort and uniq...Thanks.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://981347]
and !@monks...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2017-01-19 10:13 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (170 votes). Check out past polls.