Re: Perl sorting unique values
by Corion (Patriarch) on Jun 22, 2011 at 08:39 UTC
|
| [reply] [Watch: Dir/Any] [d/l] |
Re: Perl sorting unique values
by Utilitarian (Vicar) on Jun 22, 2011 at 08:43 UTC
|
| [reply] [Watch: Dir/Any] [d/l] [select] |
|
my %hash;
open (FILE,"abc.txt");
while (<FILE>)
{
chomp;
my ($key,$val) = split '\|';
print $hash{$val};
}
This is a bit of code which i have written,i did not applied sort on it till now.But,its not working. | [reply] [Watch: Dir/Any] [d/l] |
|
use strict;
use warnings;
my %hash;
open my $fh, '<', 'abc.txt' or die $!;
while (<$fh>) {
chomp;
my ($key, $val) = split '\|';
$hash{$val}++;
}
print "$_\n" for sort keys %hash;
| [reply] [Watch: Dir/Any] [d/l] |
Re: Perl sorting unique values
by Khen1950fx (Canon) on Jun 22, 2011 at 13:59 UTC
|
#!/usr/bin/perl
use strict;
use warnings;
use List::Uniq qw(:all);
use Data::Dumper::Concise;
my $f2 = [ qw|a c d b e d a|];
my $uniq = uniq( {sort => 1}, $f2 );
print Dumper($uniq);
| [reply] [Watch: Dir/Any] [d/l] |
Re: Perl sorting unique values
by rnaeye (Friar) on Jun 22, 2011 at 14:12 UTC
|
If you are open to non-Perl solutions, I will recommend Unix cut and sort commands. They are very easy to use. | [reply] [Watch: Dir/Any] [d/l] [select] |
Re: Perl sorting unique values
by sundialsvc4 (Abbot) on Jun 22, 2011 at 15:55 UTC
|
When you want to find the unique entries in (especially) a large collection of items, first you sort it, then you walk through the list to fetch the unique items. (Thanks to the sort, all duplicate items are adjacent.) You cannot, AFAIK, do this in just one step, unless the sort-utility or package that you are using provides that option.
TMTOWTDI, of course. Memory-based tricks such as hash-tables are certainly fine up to a point. The sort-then-uniq strategy will handle data of any quantity and will do so with linear performance.
Existing CPAN packages, as mentioned, are always to be looked-for first. (No matter what you’re doing, it has been done before.)
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|
Hi All,
I used wind's method but with slight modifications as below
##########################prints unique and sorted salary
use strict;
use warnings;
my %hash;
open my $fh, '<', 'abc.txt' or die $!;
while (<$fh>) {
chomp;
my ($key, $val , $val1) = split '\|';
$hash{$val1}++;
}
print "$_\n" for sort keys %hash;
----abc.txt------
P|PERL|50000
Paa|JAVA|20000
Poo|VB|10000
AB|SAN|20000
ABCD|CSS|500
PQRS|HTML|200
--The output is--
10000
200
20000
500
50000
Though i sorted and printed the unique values,the issue is maybe we may want to print it like
50000
20000
10000
500
200
But according to "Perl in 21 days" sort only compares the first digit/letter and sorts accordingly.
For printing the above specified output we may want to write a subroutine which compares two values and then swaps them and prints the output.
And one more thing, we are not allowed to install CPAN modules in our firm,as we have restricted access.So whatever we do we have to use existing functions and code. | [reply] [Watch: Dir/Any] [d/l] [select] |
|