#!/usr/bin/perl -w
use strict;
my @values = (
'foo52|52|bar52|111|Foobar|111|0',
'foo13|13|bar13|111|Foobar|111|0',
'foo22|22|bar22|111|Foobar|111|0',
'foo18|18|bar18|111|Foobar|111|0',
'foo6|6|bar6|111|Foobar|111|0',
'foo44|44|bar44|111|Foobar|111|0',
'foo18(2)|18|bar18(2)|111|Foobar|111|0',
'foo9|9|bar9|111|Foobar|111|0',
'foo15|15|bar15|111|Foobar|111|0',
'foo12|12|bar12|111|Foobar|111|0',
'foo2|2|bar2|111|Foobar|111|0',
'foo12(2)|12|bar12(2)|111|Foobar|111|0',
'foo9(2)|9|bar9(2)|111|Foobar|111|0',
);
# Sortera efter andra fältet m.h.a.
# "Schwartziansk transformering". :)
# Se 'perldoc -q sort'
my @sorted_values = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, ((/^[^|]*\|([^|]*)/)[0]) ] }
@values;
{
# Testblock för att se resultatet
local $, = "\n";
print "Innan sortering:\n";
print "------------------------------\n\n";
print @values;
print "\n\n------------------------------\n\n\n";
print "Efter sortering:\n";
print "------------------------------\n\n";
print @sorted_values;
print "\n\n------------------------------\n\n\n";
print "De tio första:\n";
print "------------------------------\n\n";
print @sorted_values[0..9];
print "\n\n------------------------------\n";
}
Nu kanske det kan hända att det andra fältet (som det sorteras på) kan ha samma värde i flera av posterna? I det här scriptet är det inte definierat vad som händer då, d.v.s. om t.ex. rad 10 har värdet 57 och rad 11 också har värde 57 så är det slumpen som avgör vilken som kommer med.
------------------
Robban < robban@lipogram.com >