Das Entfernen von doppelten Zeilen aus einer Textdatei ist eine gängige Aufgabe in Bash-Skripten. Dieser Artikel beschreibt zwei effiziente Methoden: die Verwendung von sort
und uniq
sowie die Nutzung der Möglichkeiten von awk
.
Inhaltsverzeichnis
Verwenden von sort
und uniq
Dieser Ansatz kombiniert zwei grundlegende Unix-Dienstprogramme für eine unkomplizierte Lösung. sort
ordnet die Zeilen alphabetisch an, eine Voraussetzung für uniq
, das dann aufeinanderfolgende Duplikate entfernt. Die Reihenfolge des *ersten* Auftretens jeder Zeile bleibt erhalten.
Hier ist der Befehl:
sort datei.txt | uniq > datei_unique.txt
Dieser Befehl leitet die sortierte Ausgabe von datei.txt
an uniq
weiter und speichert die eindeutigen Zeilen in datei_unique.txt
. Die Originaldatei bleibt unverändert.
Beispiel:
Wenn datei.txt
enthält:
Apfel
Banane
Apfel
Orange
Banane
Traube
wird datei_unique.txt
enthalten:
Apfel
Banane
Orange
Traube
Verwenden des awk
-Befehls
awk
bietet eine flexiblere und leistungsfähigere Lösung, die besonders nützlich ist, wenn die ursprüngliche Reihenfolge der Zeilen erhalten bleiben muss. Es verwendet ein assoziatives Array, um die bereits gesehenen Zeilen zu verfolgen.
Der Befehl ist bemerkenswert kurz:
awk '!seen[$0]++' datei.txt > datei_unique.txt
Schauen wir uns das im Detail an:
$0
repräsentiert die gesamte aktuelle Zeile.seen[$0]
greift auf ein Element imseen
-Array zu, wobei die Zeile als Schlüssel verwendet wird.++
inkrementiert den Wert (anfangs 0) nach der Verwendung.!
negiert das Ergebnis; die Zeile wird nur ausgegeben, wenn sie zum ersten Mal auftritt (wennseen[$0]
0 ist).
Diese Methode erhält die ursprüngliche Reihenfolge der Zeilen.
Beispiel:
Bei Verwendung der gleichen datei.txt
lautet die Ausgabe in datei_unique.txt
:
Apfel
Banane
Orange
Traube
Fazit:
Beide Methoden entfernen effektiv doppelte Zeilen. sort | uniq
ist einfacher für einfache Szenarien, während awk
mehr Flexibilität und Kontrolle bietet, insbesondere um die ursprüngliche Reihenfolge zu erhalten oder komplexere Anforderungen an die Entfernung von Duplikaten zu erfüllen.