Sortierte Ausgabe einfach gemacht

Oftmals hat man bei Versionsbezeichnungen von Programmen alphanumerische, also Buchstaben und Ziffern gemischt. Im Falle von Firefox-Beta-Versionen ist genau dieses Schema von Mozilla so gewählt.

54.0b8/
54.0b9/
55.0b1/
55.0b10/
55.0b11/
55.0b12/
55.0b13/
55.0b2/
55.0b3/
55.0b4/
55.0b5/
55.0b6/
55.0b7/
55.0b8/
55.0b9/
56.0b1/
56.0b10/
56.0b11/
56.0b12/
56.0b2/

Hier sieht man einen Ausschnit wie sie original im Mozilla Webverzeichnis der Firefoxversionen vorkommt. Es wird alphabetisch und nicht numerisch sortiert, d.h. die Version 55.0b10 kommt direkt nacht 55.0b1.

Nun kann man dem Kommando sort und seinen Optionen schon einiges probieren. Ein Ansatz wäre quasi den Punkt als Feldtrenner zu definieren (Option -t) auf numerische Sortierung setzen (Option -n) und zuerst nach der ersten Spalte dann nach der zweiten Spalte zu sortieren (Option -k).

$ cat versionen.txt | sort -t"." -n -k1,2

Leider ändert sich an der Ausgabe nichts, weil die zweite Spalte eben nicht rein numerisch sondern aus alphanumerisch Zeichen besteht (Ziffern mit Buchstaben kombiniert, zB. 0b10). Um es vorweg zu nehmen auf obige Weise habe ich das Problem nicht lösen können. Es gibt allerdings genau für solche Fälle eine eigene Option vom sort-Kommando, die –version-sort benannt ist.

$ cat versionen.txt | sort --version-sort
54.0b8/
54.0b9/
55.0b1/
55.0b2/
55.0b3/
55.0b4/
55.0b5/
55.0b6/
55.0b7/
55.0b8/
55.0b9/
55.0b10/
55.0b11/
55.0b12/
55.0b13/
56.0b1/
56.0b2/
56.0b10/
56.0b11/
56.0b12/

Diese Option war mir bis dato unbekannt. Es löst die Sortierungsproblematik auf einfachste Weise und sehr effizient.