20470:ZM:Samfya:Africa
20149:ZM:Sesheke:Africa
18638:ZM:Siavonga:Africa
26459:ZW:Beitbridge:Africa
37423:ZW:Bindura:Africa
699385:ZW:Bulawayo:Africa
47294:ZW:Chegutu:Africa
61739:ZW:Chinhoyi:Africa
18860:ZW:Chipinge:Africa
28205:ZW:Chiredzi:Africa
####
20470:ZM:Samfya:Africa
20149:ZM:Sesheke:Africa
18638:ZM:Siavonga:Africa
699385:ZW:Bulawayo:Africa
61739:ZW:Chinhoyi:Africa
47294:ZW:Chegutu:Africa
37423:ZW:Bindura:Africa
####
#!/usr/local/bin/perl
use strict;
use warnings;
use Data::Dumper;
my (%HoA, %lines);
while (my $line = ) {
my ($value, $key) = split /:/, $line, 3;
push @{$HoA{$key}}, $value;
$lines{"$key $value"} = $line # This could be done better
}
for my $country (keys %HoA) {
my @list = sort { $b <=> $a } @{$HoA{$country}}; # This could be done better
for my $ind (0 .. 3) { # This could be done better
my $popu = $list[$ind] or next;
print $lines{"$country $popu"};
}
}
__DATA__
20470:ZM:Samfya:Africa
20149:ZM:Sesheke:Africa
18638:ZM:Siavonga:Africa
26459:ZW:Beitbridge:Africa
37423:ZW:Bindura:Africa
699385:ZW:Bulawayo:Africa
47294:ZW:Chegutu:Africa
61739:ZW:Chinhoyi:Africa
18860:ZW:Chipinge:Africa
28205:ZW:Chiredzi:Africa
####
perl -F":" -lane '
BEGIN { $"=":" }
push @{$h{$F[1]}}, $F[0];
$line{$F[1],$F[0]} = "@F"; }{
for $k (keys %h) { print @$_ for map [ $line{$k,$_} ], sort { $b <=> $a } @{$h{$k}} }' file
20470:ZM:Samfya:Africa
20149:ZM:Sesheke:Africa
18638:ZM:Siavonga:Africa
699385:ZW:Bulawayo:Africa
61739:ZW:Chinhoyi:Africa
47294:ZW:Chegutu:Africa
37423:ZW:Bindura:Africa
28205:ZW:Chiredzi:Africa
26459:ZW:Beitbridge:Africa
18860:ZW:Chipinge:Africa
####
perl -F":" -lane '
BEGIN { $"=":" }
push @{$h{$F[1]}}, $F[0];
$line{$F[1],$F[0]} = "@F"; }{
for $k (keys %h) { print $line{$k,$_} for splice [sort { $b <=> $a } @{$h{$k}}] , 0, 4 }' file
20470:ZM:Samfya:Africa
20149:ZM:Sesheke:Africa
18638:ZM:Siavonga:Africa
699385:ZW:Bulawayo:Africa
61739:ZW:Chinhoyi:Africa
47294:ZW:Chegutu:Africa
37423:ZW:Bindura:Africa