Linux / Befehl uniq: Entfernen oder Zählen benachbarter doppelter Zeilen
uniq reduziert aufeinanderfolgende identische Zeilen auf eine einzelne Zeile oder zeigt die Anzahl der Wiederholungen an. Um doppelte Werte aus der gesamten Datei zu entfernen, müssen Sie normalerweise zuerst sortieren.
Identische Zeilen, die voneinander entfernt sind, können nicht nur mit uniq entfernt werden. Wenn Sie die Eingabereihenfolge beibehalten müssen, sortieren Sie nicht blind; entscheiden Sie zuerst, welche Duplikate wichtig sind. Die Verwendung von uniq nach dem Sortieren ändert die ursprüngliche Zeilenreihenfolge.
Grundlegende Syntax
uniq [option] [input file [output file]]
Die installierte Implementierung und die Optionen können je nach Distribution variieren. Überprüfen Sie die Beschreibung auf Ihrem aktuellen System mit man uniq.
Beispiele
Entfernen von aufeinanderfolgenden Duplikaten
Wenn dieselbe Zeile aufeinanderfolgend vorkommt, wird nur die erste Zeile ausgegeben.
uniq events.txt
Alle Duplikate zählen
Nach dem Gruppieren identischer Werte durch Sortierung verwenden Sie -c, um die Anzahl der Wiederholungen anzuzeigen.
sort names.txt | uniq -c
Nur doppelte Werte überprüfen
Drucken Sie die Typen von Werten, die zweimal oder öfter hintereinander vorkommen.
sort names.txt | uniq -d
Unterscheidung von benachbarten Duplikaten und Gesamtdubletten
uniq kombiniert nur aufeinanderfolgende identische Zeilen. Im folgenden Beispiel ist das letzte apple separat, weil es nicht neben den ersten beiden Zeilen steht.
printf 'apple\napple\nbanana\napple\n' | uniq -c
Beispielausgabe (Abstände vor den Zahlen können je nach Implementierung variieren):
2 apple 1 banana 1 apple
Um identische Zeilen über die gesamte Datei hinweg zu einer einzigen zusammenzuführen, verwenden Sie sort file | uniq nach dem Sortieren. Das Sortieren ändert jedoch die ursprüngliche Reihenfolge der Zeilen, daher sollte es nicht blind auf Protokolle oder Ereignisaufzeichnungen angewendet werden, bei denen die Eingabereihenfolge wichtig ist. -d zeigt nur Duplikatgruppen an, und -u zeigt nur Gruppen, die nur einmal vorkommen.
Hauptoptionen und Format
| Optionen/Format | Beschreibung |
|---|---|
-c |
Fügen Sie die Anzahl aufeinanderfolgender Vorkommen vor jeder Ausgabzeile an. |
-d |
Drucken Sie nur doppelte Zeilen. |
-u |
Drucken Sie nur Zeilen, die einmal vorkommen. |
-i |
Ignorieren Sie die Groß-/Kleinschreibung beim Vergleichen. |
-f N |
Schließen Sie die ersten N Felder vom Vergleich aus. |
Vorsichtsmaßnahmen bei der Verwendung
Die Ergebnisse der Sortierung und des Vergleichs mit sort | uniq können je nach Gebietsschema variieren. Wenn Sie eine genaue byte-basierte Aggregation benötigen, wenden Sie dieselbe LC_ALL=C-Umgebung auf beide Befehle an. uniq -u bezieht sich auf Zeilen, die nur einmal vorkommen, nicht auf alle eindeutigen Werte.
Häufig gestellte Fragen
Warum entfernt uniq keine doppelten Zeilen, die nicht aufeinanderfolgen?
Weil es die aktuelle Zeile mit der unmittelbar vorhergehenden Zeile vergleicht. Um alle Duplikate zu entfernen, sortieren Sie die Eingabe, sodass identische Zeilen zusammen gruppiert sind.
Offizielle Dokumentation
Sie können das genaue Verhalten der Optionen und Implementierungsunterschiede in der offiziellen uniq-Dokumentation nachlesen.




