Zählen Sie eindeutige Zeilen in einer Datei in Linux

Olorunfemi Akinlua 20 Juni 2023
  1. Verwenden Sie die Befehle sort und uniq, um eindeutige Zeilen in einer Datei zu zählen
  2. Verwenden Sie den Befehl awk, um eindeutige Zeilen in einer Datei zu zählen
Zählen Sie eindeutige Zeilen in einer Datei in Linux

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 Akinlua avatar Olorunfemi Akinlua avatar

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

Verwandter Artikel - Linux File