PowerShell ist zwar eine objektorientierte Kommandozeile, aber man kann auch einfachen Text mit der PowerShell bearbeiten. Hier zeige ich, wie man eine einfache Mitgliederliste mit der PowerShell sortieren kann.
Als Ausgangsdatei in den Beispielen verwende ich die Datei „mitglieder.txt“ mit dem folgenden Inhalt:
1 2 3 4 5 |
Peter Müller Andreas Schmidt Georg Weiß Stefan Bauer Leo Meier |
Um diese Datei nach Vornamen zu sortieren und das Ergebnis in der Datei „mitglieder-sortiert.txt“ zu speichern, genügt folgender Befehl:
1 |
Get-Content mitglieder.txt | Sort-Object > mitglieder-sortiert.txt |
Die Ergebnisdatei „mitglieder-sortiert.txt“ sieht danach so aus:
1 2 3 4 5 |
Andreas Schmidt Georg Weiß Leo Meier Peter Müller Stefan Bauer |
Das war einfach. Was ist aber, wenn wir nach den Nachnamen sortieren wollen?
Das müssen wir irgendwie dem Commandlet „Sort-Object“ sagen. Das tun wir, indem wir jede Zeile ($_) am Leerzeichen („\s+“) aufsplitten und das zweite Wort an „Sort-Object“ übergeben. (Die 1 steht für das zweite Wort, weil 0 für das erste Wort steht):
1 |
Get-Content mitglieder.txt | Sort-Object { ($_ -Split "\s+")[1] } > mitgliedersortiert.txt |
Die Ergebnisdatei „mitglieder-sortiert.txt“ sieht jetzt so aus:
1 2 3 4 5 |
Stefan Bauer Leo Meier Peter Müller Andreas Schmidt Georg Weiß |
Die beiden Sortierungen sind aufsteigend. Möchte man absteigend sortieren, dann muss man den Parameter „-Descending“ hinzufügen.
1 |
Get-Content mitglieder.txt | Sort-Object -Descending { ($_ -Split "\s+")[1] } > mitglieder-sortiert.txt |
Die Ergebnisdatei sieht dann so aus:
1 2 3 4 5 |
Georg Weiß Andreas Schmidt Peter Müller Leo Meier Stefan Bauer |
Soviel zum Sortieren von Textdateien mit der PowerShell. Wenn man PowerShell mit den Möglichkeiten von UNIX vergleicht, dann ist PowerShell sehr wortreich. Unter UNIX würde man folgendermaßen nach Nachnamen sortieren:
1 |
sort -k2 mitglieder.txt > mitglieder-sortiert.txt |
Daraus darf man aber nicht schlussfolgern, dass PowerShell irgendwie schlechter ist als die UNIX-Tools. UNIX ist nun mal alt und textorientiert und PowerShell zeigt ihre wahren Stärken beim Verarbeiten von objektorientierten Commandlets.