Entfernen Sie doppelte Zeilen in Bash

Olorunfemi Akinlua 20 Juni 2023
  1. Verwenden Sie sort und uniq, um doppelte Zeilen in Bash zu entfernen
  2. Verwenden Sie den Befehl awk, um doppelte Zeilen in Bash zu entfernen
Entfernen Sie doppelte Zeilen in Bash

Doppelte Einträge können verschiedene Probleme in einem Bash-Skript verursachen, wie z. B. falsche oder inkonsistente Ergebnisse, und sie können das Skript auch schwer wartbar machen. Das Entfernen doppelter Einträge aus dem Skript ist oft notwendig, um diese Probleme zu vermeiden, und es gibt zahlreiche Möglichkeiten, dies in Bash zu tun.

Verwenden Sie sort und uniq, um doppelte Zeilen in Bash zu entfernen

Ein Ansatz zum Entfernen doppelter Einträge in einem Bash-Skript 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 doppelte Einträge aus der obigen Datei zu entfernen, können Sie den folgenden Befehl verwenden:

sort data.txt | uniq > data-unique.txt

Ausgabe (touch data-unique.txt):

arg1
arg2
arg3

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 doppelte Zeilen aus den sortierten Daten heraus und schreibt das Ergebnis in eine neue Datei namens data-unique.txt.

Dadurch werden alle doppelten Einträge aus der Datei data.txt entfernt und eine neue Datei mit eindeutigen Einträgen erstellt.

Der Befehl uniq verfügt über mehrere Optionen, mit denen sein Verhalten gesteuert werden kann, z. B. die Option -d, um nur doppelte Zeilen zu drucken, oder die Option -c, um zu drucken, wie oft jede Zeile erscheint in der Eingabe. Um beispielsweise zu drucken, wie oft jede Zeile in der Datei data.txt vorkommt, können Sie den folgenden Befehl verwenden:

sort data.txt | uniq -c

Dieser Befehl ähnelt dem vorherigen, fügt jedoch die Option -c zum Befehl uniq hinzu. Dadurch wird die Anzahl der Male gedruckt, mit denen jede Zeile in der Eingabe und der Zeile selbst erscheint.

Das Ergebnis könnte beispielsweise so aussehen:

2 arg1
3 arg2
1 arg3

Diese Ausgabe zeigt, dass Zeile 1 angezeigt wird.

Verwenden Sie den Befehl awk, um doppelte Zeilen in Bash zu entfernen

Ein weiterer Ansatz zum Entfernen doppelter Einträge in einem Bash-Skript ist die Verwendung des Befehls awk, ein leistungsstarkes Textverarbeitungstool, das zahlreiche Operationen auf 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 doppelte Einträge aus derselben Datei wie zuvor zu entfernen, können Sie den folgenden Befehl verwenden:

awk '!a[$0]++' data.txt > data-unique.txt

Ausgang:

arg1
arg2
arg3

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 in eine neue Datei namens data-unique.txt umgeleitet, die eindeutige Einträge aus der Datei data.txt enthält.

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 im Skript definieren.

Sie können auch die Funktion printf verwenden, um die Ausgabe des awk-Befehls auf verschiedene Arten zu formatieren.

Die Befehle sort und uniq sind einfache und effiziente Werkzeuge zum Entfernen doppelter Einträge, 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