Perl: Sortieren nach "zweiter" Spalte

06/10/2013 - 21:36 von Andre Tann | Report spam
Hallo zusammen,

folgende Frage zur Sortierfunktion in Perl:

Diese Dateien:

$ ls -1
prefix_1
prefix_11
prefix_12
prefix_14
prefix_2
prefix_3
prefix_5

möchte ich numerisch sortiert ausgeben. Die Bash macht es so:

$ ls -1 | sort -t_ -k2,2n
prefix_1
prefix_2
prefix_3
prefix_5
prefix_11
prefix_12
prefix_14

Wie bekomme ich das àhnlich elegant mit der sort-Funktion hin, ohne erst alles zu splitten, dann in ein zweidimensionales Array zu packen, dieses nach der zweiten Spalte zu sortieren, und dann wieder auszugeben?

Freue mich über Denkanstöße!

Andre Tann
 

Lesen sie die antworten

#1 Marcel Müller
06/10/2013 - 22:21 | Warnen spam
Hallo,

On 06.10.13 21.36, Andre Tann wrote:
Wie bekomme ich das àhnlich elegant mit der sort-Funktion hin, ohne erst alles zu splitten, dann in ein zweidimensionales Array zu packen, dieses nach der zweiten Spalte zu sortieren, und dann wieder auszugeben?



ich kenne auch keinen signifikant besseren Weg.

Du kannst natürlich mit einer Regex über die Zeilen rutschen, die die
zweite Spalte herausdestilliert und selbige im sort-comparer verwenden.
Ich glaube aber, dass das eher langsamer ist.

Also sinngemàß:

sub col2($)
{ $_[0] =~ /_([\d]*)/;
return $1;
}
sort { col2 $a <=> col2 $b } @data;

(geht wahrscheinlich auch noch irgendwie kürzer)


Marcel

Ähnliche fragen