Tipp: Sortieren nach Versionsnummer
Eine Liste von Software-Produkten mit Versionsnummer soll sortiert werden. Dabei soll innerhalb eines Produkt die höchste Versionsnummer oben in der Liste stehen.
Als Beispiel soll eine Datei versions.txt
dienen, die wie folgt aussieht:
ITNM 7.1.0.3 ITNM 7.2.0.11 ITNM 7.2.0.0 ITNM 7.1.1.5 ITNM 6.1.0.0 Tivoli 4.4.1.1 Tivoli 4.4.1.2 Tivoli 4.4.1.11 Tivoli 4.2.1.1 Tivoli Manager 1.1.1.1 Tivoli Manager 1.1.1.2 Tivoli Manager 1.1.1.11 Tivoli Manager 1.21.1.1 Tivoli Manager 1.3.1.1 Network Manager 4.4.1.1 Network Manager 4.4.1.2 Network Manager 4.4.1.11 Network Manager 4.2.1.1
Am einfachsten geht dies, wenn man eine aktuelle Version der GNU-Coreutils, z.B. Version 8.19, installiert hat
$ sort -r -V versions.txt Tivoli Manager 1.21.1.1 Tivoli Manager 1.3.1.1 Tivoli Manager 1.1.1.11 Tivoli Manager 1.1.1.2 Tivoli Manager 1.1.1.1 Tivoli 4.4.1.11 Tivoli 4.4.1.2 Tivoli 4.4.1.1 Tivoli 4.2.1.1 Network Manager 4.4.1.11 Network Manager 4.4.1.2 Network Manager 4.4.1.1 Network Manager 4.2.1.1 ITNM 7.2.0.11 ITNM 7.2.0.0 ITNM 7.1.1.5 ITNM 7.1.0.3 ITNM 6.1.0.0
Der Schalter -r
wirkt hier auf alle Felder, so dass nicht nur die höchste Versionsnummer oben steht, sondern auch die Paketnamen alphabetisch von Z nach A
sortiert werden. Ältere Versionen von sort
verstehen überdies den Schalter -V
nicht - das gleiche gilt für Versionen von
sort
, die man auf proprietären UNIX-Derivaten findet.
Dennoch ist dies auch mit sort
-Bordmitteln erreichbar. Allerdings müssen wir dafür in der Datei versions.txt
zwischen dem Paketnamen
und der Versionsnummer noch einen Punkt(.) einfügen. ¹ Dies ist nötig, damit wir den Schalter -t"."
nutzen können:
$ sort -t"." -k1,1 -k2,2nr -k3,3nr -k4,4nr -k5,5nr versions.txt ITNM.7.2.0.11 ITNM.7.2.0.0 ITNM.7.1.1.5 ITNM.7.1.0.3 ITNM.6.1.0.0 Network Manager.4.4.1.11 Network Manager.4.4.1.2 Network Manager.4.4.1.1 Network Manager.4.2.1.1 Tivoli.4.4.1.11 Tivoli.4.4.1.2 Tivoli.4.4.1.1 Tivoli.4.2.1.1 Tivoli Manager.1.21.1.1 Tivoli Manager.1.3.1.1 Tivoli Manager.1.1.1.11 Tivoli Manager.1.1.1.2 Tivoli Manager.1.1.1.1
Diese Variante funktioniert mit den meisten Varianten von sort ², auch mit der GNU-Variante. Deshalb ist sie deutlich portabler. Sie hat zudem den Vorteil,
dass die Softwarepakete weiterhin von A nach Z sortiert werden, während die höchste Versionsnummer aber oben steht. Hier wird der Schalter
-r
nämlich individuell auf jedes Feld angewandt.