Website-Suche

Entfernen doppelter Zeilen aus einer Textdatei mit der Linux-Befehlszeile


Das Entfernen doppelter Zeilen aus einer Textdatei kann über die Linux-Befehlszeile erfolgen. Eine solche Aufgabe kann häufiger und notwendiger sein, als Sie denken. Das häufigste Szenario, in dem dies hilfreich sein kann, sind Protokolldateien. Oft wiederholen Protokolldateien dieselben Informationen immer wieder, was es fast unmöglich macht, die Datei zu durchsuchen, und die Protokolle manchmal unbrauchbar macht.

In dieser Anleitung zeigen wir Ihnen verschiedene Befehlszeilenbeispiele, mit denen Sie doppelte Zeilen aus einer Textdatei löschen können. Probieren Sie einige der Befehle auf Ihrem eigenen System aus, und verwenden Sie den Befehl, der für Ihr Szenario am besten geeignet ist.

In diesem Tutorial lernen Sie:

  • So entfernen Sie doppelte Zeilen beim Sortieren aus der Datei
  • So zählen Sie die Anzahl der doppelten Zeilen in einer Datei
  • So entfernen Sie doppelte Zeilen, ohne die Datei zu sortieren

Verschiedene Beispiele für das Entfernen doppelter Zeilen aus einer Textdatei unter Linux

Entfernen Sie doppelte Zeilen aus der Textdatei

Diese Beispiele funktionieren auf jeder Linux-Distribution, vorausgesetzt, Sie verwenden die Bash-Shell.

In unserem Beispielszenario arbeiten wir mit der folgenden Datei, die nur die Namen verschiedener Linux-Distributionen enthält. Dies ist eine sehr einfache Textdatei, aber in Wirklichkeit könnten Sie diese Methoden auf Dokumente anwenden, die sogar Tausende von Wiederholungszeilen enthalten. Anhand der folgenden Beispiele sehen wir, wie Sie alle Duplikate aus dieser Datei entfernen können.


cat distros.txt
Ubuntu
CentOS
Debian
Ubuntu
Fedora
Debian
openSUSE
openSUSE
Debian
  1. Der Befehl uniq ist in der Lage, alle eindeutigen Zeilen aus unserer Datei zu isolieren, aber das funktioniert nur, wenn die doppelten Zeilen nebeneinander liegen. Damit die Zeilen nebeneinander liegen, müssten sie zunächst in alphabetischer Reihenfolge sortiert werden. Der folgende Befehl funktioniert mit sort und uniq.

    
    sort distros.txt | uniq
    CentOS
    Debian
    Fedora
    openSUSE
    Ubuntu
    

    Um die Dinge einfacher zu machen, können wir einfach das -u mit sort verwenden, um genau das gleiche Ergebnis zu erhalten, anstatt an uniq.
     

    
    sort -u distros.txt
    CentOS
    Debian
    Fedora
    openSUSE
    Ubuntu
    


  2. Um zu sehen, wie viele Vorkommen jeder Zeile in der Datei enthalten sind, können wir die Option -c (Anzahl) mit uniq verwenden.

    
    sort distros.txt | uniq -c
          1 CentOS
          3 Debian
          1 Fedora
          2 openSUSE
          2 Ubuntu
    
  3. Um die Zeilen zu sehen, die sich am häufigsten wiederholen, können wir mit den Optionen -n (numerische Sortierung) und -r umkehren an einen weiteren Sortierbefehl weiterleiten. Auf diese Weise können wir schnell sehen, welche Zeilen in der Datei am häufigsten dupliziert werden – eine weitere praktische Option zum Durchsuchen von Protokollen.

    
    sort distros.txt | uniq -c | sort -nr
          3 Debian
          2 Ubuntu
          2 openSUSE
          1 Fedora
          1 CentOS
    
  4. Ein Problem bei der Verwendung der vorherigen Befehle besteht darin, dass wir uns auf sort verlassen. Das bedeutet, dass unsere endgültige Ausgabe alphabetisch sortiert ist, oder sortiert nach der Anzahl der Wiederholungen, wie im vorherigen Beispiel. Das mag manchmal eine gute Sache sein, aber was ist, wenn wir die Textdatei benötigen, um ihre vorherige Reihenfolge beizubehalten? Wir können doppelte Zeilen entfernen, ohne die Datei zu sortieren, indem wir den Befehl awk in der folgenden Syntax verwenden.

    
    awk '!seen[$0]++' distros.txt 
    Ubuntu
    CentOS
    Debian
    Fedora
    openSUSE
    

    Mit diesem Befehl wird das erste Vorkommen einer Zeile beibehalten, und zukünftige doppelte Zeilen werden aus der Ausgabe entfernt.

  5. In den vorherigen Beispielen wird die Ausgabe direkt an Ihr Terminal gesendet. Wenn Sie eine neue Textdatei wünschen, in der Ihre doppelten Zeilen herausgefiltert werden, können Sie eines dieser Beispiele anpassen, indem Sie einfach den > Bash-Operator verwenden, wie im folgenden Befehl beschrieben.

    
    awk '!seen[$0]++' distros.txt > distros-new.txt
    

Dies sollten alle Befehle sein, die Sie benötigen, um doppelte Zeilen aus einer Datei zu löschen, während Sie optional die Zeilen sortieren oder zählen. Es gibt noch mehr Methoden, aber diese sind am einfachsten zu verwenden und zu merken.

Abschließende Gedanken

In dieser Anleitung haben wir verschiedene Befehlsbeispiele gesehen, um doppelte Zeilen aus einer Textdatei unter Linux zu entfernen. Sie können diese Befehle auf Protokolldateien oder jede andere Art von Klartextdatei anwenden, die doppelte Zeilen enthält. Wir haben auch gelernt, wie man Zeilen einer Textdatei sortiert oder die Anzahl der Duplikate zählt, da dies manchmal die Isolierung der benötigten Informationen aus einem Dokument beschleunigen kann.

Verwandte Artikel: