Was ein wenig wie eine Excel Problemstellung klingt, erledigt der geübte GNU / Linux Anwender in der Shell schnell und einfach mit den GNU coreutils sort und uniq. Mit den beiden Anwendungen lassen sich zwar noch jede Menge weiterer Probleme lösen, aber da ich dieses Kommando in den letzten Jahren gefühlt recht häufig gebraucht habe, möchte ich es hier kurz festhalten.
Als Beispiel dient eine Textdatei mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 |
rot blau rot rot gruen gelb blau rot lila blau |
Was hier ein paar Farben sind, können in der Praxis Ausschnitte aus Log-Dateien, Spalten von CSV Dateien oder Ähnliches sein. Möchte man nun die Häufigkeiten der Farben zählen und entsprechend sortieren, muss zuerst die Datei selbst sortiert werden ( sort testfile.txt). Die Zeilen werden gezählt und doppelte Einträge entfernt ( uniq -c), die Häufigkeit wird an den Anfang der Zeile geschrieben. Am Ende wird das Ergebnis noch einmal nach der Häufigkeit, die am Anfang der Zeile steht, in absteigender Reihenfolge sortiert ( sort -nr).
Das vollständige Kommando ist eigentlich recht überschaubar und liefert folgendes Ergebnis:
1 2 3 4 5 6 |
sort testfile.txt | uniq -c | sort -nr 4 rot 3 blau 1 lila 1 gruen 1 gelb |
Genau die Lösung die ich gesucht habe.
Danke für den Hinweis.