Zählen Sie eindeutige Zeilen in einer Datei in Linux
-
Verwenden Sie die Befehle
sort
unduniq
, um eindeutige Zeilen in einer Datei zu zählen -
Verwenden Sie den Befehl
awk
, um eindeutige Zeilen in einer Datei zu zählen
Das Zählen der eindeutigen Zeilen in einer Datei ist eine häufige Aufgabe in Linux, und mehrere verschiedene Tools und Methoden können verwendet werden, um diesen Vorgang auszuführen. Im Allgemeinen hängt die geeignete Methode von den spezifischen Anforderungen und Einschränkungen der Aufgabe ab, wie z. B. der Größe der Eingabedatei, den Leistungs- und Speicheranforderungen sowie dem Format und Inhalt der Daten.
Verwenden Sie die Befehle sort
und uniq
, um eindeutige Zeilen in einer Datei zu zählen
Ein Ansatz zum Zählen eindeutiger Zeilen in einer Datei unter Linux ist die Verwendung der Befehle sort
und uniq
. Der Befehl sort
sortiert die Eingabedaten in einer bestimmten Reihenfolge, und der Befehl uniq
filtert doppelte Zeilen aus den sortierten Daten heraus.
Die Datei data.txt
enthält den unten stehenden Inhalt für die Beispiele in diesem Artikel.
arg1
arg2
arg3
arg2
arg2
arg1
Um die Anzahl der eindeutigen Zeilen in der Datei zu zählen, können Sie den folgenden Befehl verwenden:
sort data.txt | uniq -c | wc -l
Ausgang:
3
Dieser Befehl sortiert die Datei data.txt
in aufsteigender Reihenfolge (standardmässig) und leitet die Ausgabe an den Befehl uniq
weiter. Der Befehl uniq
filtert alle doppelten Zeilen aus den sortierten Daten heraus und fügt eine Zählung hinzu, wie oft jede Zeile in der Eingabe erscheint.
Die Ausgabe wird dann an den Befehl wc
weitergeleitet, der die Anzahl der Zeilen in der Eingabe zählt und das Ergebnis an das Terminal ausgibt.
Die Befehle sort
und uniq
sind einfache und effiziente Werkzeuge zum Zählen eindeutiger Zeilen in einer Datei und eignen sich für die meisten gängigen Szenarien. Sie haben jedoch einige Einschränkungen und Nachteile, wie z. B. die Notwendigkeit, die Eingabedaten zu sortieren, was bei großen Dateien langsam und speicherintensiv sein kann.
Darüber hinaus entfernt der Befehl uniq
nur benachbarte doppelte Zeilen aus den sortierten Daten, sodass er bei einigen Eingaben möglicherweise nicht das erwartete Ergebnis liefert.
Verwenden Sie den Befehl awk
, um eindeutige Zeilen in einer Datei zu zählen
Ein weiterer Ansatz zum Zählen eindeutiger Zeilen in einer Datei unter Linux ist die Verwendung des Befehls awk
, ein leistungsstarkes Textverarbeitungstool, das verschiedene Operationen an Textdateien ausführen kann. Der Befehl awk
hat eine eingebaute assoziative Array-Datenstruktur, die das Vorkommen jeder Zeile in der Eingabe speichern und zählen kann.
Um beispielsweise die Anzahl der eindeutigen Zeilen in einer Datei namens data.txt
zu zählen, können Sie den folgenden Befehl verwenden:
awk '!a[$0]++' data.txt | wc -l
Ausgang:
3
Dieser Befehl verwendet den Befehl awk
, um die Datei data.txt
zu lesen, und wendet eine einfache Bedingung auf jede Eingabezeile an. Die Bedingung verwendet den Ausdruck !a[$0]++
, der den Wert des Arrays a
für jede gelesene Zeile erhöht.
Dadurch wird effektiv gezählt, wie oft jede Zeile in der Eingabe erscheint, und die Zählung im Array a
gespeichert.
Der awk
-Befehl wendet dann das !
-Operator für den Ausdruck a[$0]
, der den Wert des Array-Elements negiert. Das bedeutet, dass nur Zeilen mit einem Zählwert von 0 im Array a
die Bedingung passieren und an die Ausgabe ausgegeben werden.
Die Ausgabe wird dann an den Befehl wc
weitergeleitet, der die Anzahl der Zeilen in der Eingabe zählt und das Ergebnis an das Terminal ausgibt.
Der Befehl awk
bietet auch mehrere Optionen und Funktionen, mit denen sein Verhalten gesteuert und seine Ausgabe angepasst werden kann. Beispielsweise können Sie mit der Option -F
ein anderes Feldtrennzeichen angeben oder mit der Option -v
eine Variable definieren, die im Skript verwendet werden kann.
Sie können auch die Funktion printf
verwenden, um die Ausgabe des awk
-Befehls auf verschiedene Arten zu formatieren.
Hier ist ein Beispiel für ein komplexeres awk
-Skript, das diese Funktionen verwendet, um die Anzahl eindeutiger Zeilen in einer Datei namens data.txt
zu zählen, wobei jede Zeile eine durch Kommas getrennte Liste von Feldern ist:
awk -F, '{a[$1]++} END {for (i in a) { printf "%s,%d\n", i, a[i] }}' data.txt | wc -l
Ausgang:
3
Dieses Skript verwendet die Option -F
, um das Zeichen ,
als Feldtrennzeichen anzugeben, und es definiert ein a
-Array, das verwendet wird, um die Vorkommen jedes Felds in der Eingabe zu speichern und zu zählen.
Der Befehl awk
liest dann jede Zeile der Datei data.txt
und erhöht den Wert des Arrays a
für jedes gelesene Feld. Dadurch wird effektiv gezählt, wie oft jedes eindeutige Feld in der Eingabe erscheint.
Der END
-Block des Skripts wird ausgeführt, nachdem alle Zeilen der Eingabe gelesen wurden, und iteriert mit der for
-Schleife über das a
-Array. Die Funktion printf
wird verwendet, um die Ausgabe des Befehls awk
zu formatieren, und sie gibt jedes eindeutige Feld und seine Anzahl an die Ausgabe aus.
Die Ausgabe wird dann an den Befehl wc
weitergeleitet, der die Anzahl der Zeilen in der Eingabe zählt und das Ergebnis an das Terminal ausgibt.
Zusammenfassend lässt sich sagen, dass es mehrere Möglichkeiten gibt, eindeutige Zeilen in einer Datei unter Linux zu zählen, und die geeignete Methode hängt von den spezifischen Anforderungen und Einschränkungen der Aufgabe ab. Die Befehle sort
und uniq
sind einfache und effiziente Werkzeuge zum Zählen eindeutiger Zeilen, und der Befehl awk
bietet erweiterte Funktionen und Optionen zum Anpassen der Ausgabe und des Verhaltens des Skripts.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn