Der uniq (unique) Befehl ist ein wesentliches Werkzeug zur Textverarbeitung unter Linux. Er hilft Ihnen dabei, doppelte Zeilen in einer Textdatei zu filtern und zu verwalten, aber es ist wichtig zu verstehen, wie er funktioniert, um ihn effektiv einzusetzen.
Entfernen einfacher Duplikate
Die Hauptfunktion des uniq-Befehls besteht darin, doppelte benachbarte Zeilen zu entfernen. Stellen Sie sich vor, Sie haben eine Datei namens reading.txt mit folgendem Inhalt:
book
book
paper
paper
article
article
magazine
Um die wiederholten Zeilen zu entfernen, können Sie den uniq-Befehl ausführen:
$ uniq reading.txt
book
paper
article
magazine
Wie Sie sehen, gibt uniq eine Version der Datei aus, bei der die doppelten benachbarten Zeilen entfernt wurden.
Erweiterte Filteroptionen
Der uniq-Befehl bietet auch verschiedene Optionen für eine detailliertere Analyse.
Um die Vorkommen jeder Zeile zu zählen, verwenden Sie das Flag -c (count):
$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine
Um nur die Zeilen anzuzeigen, die nicht wiederholt werden (d. h. eindeutig sind), verwenden Sie das Flag -u (unique):
$ uniq -u reading.txt
magazine
Umgekehrt verwenden Sie das Flag -d (duplicated), um nur die Zeilen anzuzeigen, die wiederholt werden:
$ uniq -d reading.txt
book
paper
article
Die Bedeutung des Sortierens
Ein entscheidendes Detail beim uniq linux Befehl ist, dass er doppelte Zeilen nur erkennt, wenn sie direkt nebeneinander liegen. Wenn die Duplikate über die Datei verstreut sind, erkennt uniq sie nicht.
Betrachten Sie diese Version von reading.txt, bei der die Duplikate nicht benachbart sind:
book
paper
book
paper
article
magazine
article
Wenn Sie uniq auf dieser Datei ausführen, erhalten Sie ein überraschendes Ergebnis:
$ uniq reading.txt
book
paper
book
paper
article
magazine
article
Es wurden keine Zeilen entfernt, da keine zwei identischen Zeilen direkt nebeneinander standen. Um dieses Problem zu lösen, müssen Sie zuerst den Inhalt der Datei sortieren. Indem Sie die Ausgabe von sort in uniq umleiten (pipen), stellen Sie sicher, dass alle identischen Zeilen benachbart werden, sodass uniq korrekt arbeiten kann. Diese Kombination ist ein leistungsstarkes und häufiges Muster im Shell-Scripting.
$ sort reading.txt | uniq
article
book
magazine
paper
Dieser Befehl sortiert zuerst die Zeilen alphabetisch, dann filtert uniq die Duplikate heraus und liefert Ihnen eine saubere Liste eindeutiger Einträge.