GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zeilen basierend auf Duplikaten innerhalb einer Spalte ohne Sortierung entfernen?

Ich habe große 3-Spalten-Dateien (~10.000 Zeilen) und möchte Zeilen entfernen, wenn der Inhalt der dritten Spalte dieser Zeile in der dritten Spalte einer anderen Zeile erscheint. Die Größe der Dateien macht das Sortieren etwas umständlich, und ich kann so etwas wie den folgenden Code nicht verwenden, da die gesamten Zeilen nicht identisch sind; nur der Inhalt von Spalte 3.

awk '!seen[$0]++' filename

Akzeptierte Antwort:

Ändern Sie einfach Ihren awk-Befehl in die Spalte, in der Sie doppelte Zeilen basierend auf dieser Spalte entfernen möchten (in Ihrem Fall dritte Spalte):

awk '!seen[$3]++' filename

Dieser Befehl teilt awk mit welche Zeilen gedruckt werden sollen. Die Variable $3 enthält den gesamten Inhalt von Spalte 3 und eckige Klammern sind Array-Zugriffe. Für jede dritte Spalte der Zeile in Dateiname wird also der Knoten des Arrays mit dem Namen seen wird inkrementiert und die Zeile gedruckt, wenn der Inhalt dieses Knotens (Spalte3) nicht (! ) zuvor festgelegt.

Oben funktioniert es, wenn Ihre Spalten in der Eingabedatei durch Leerzeichen/Tabs getrennt sind, wenn das etwas anderes ist, müssen Sie es mit seinem -F anweisen, es zu awk Möglichkeit. Wenn also beispielsweise durch Komma getrennte Spalten (, ) und möchte Zeilen basierend auf der dritten Spalte entfernen, verwenden Sie den folgenden Befehl:

awk -F',' '!seen[$3]++' filename

Linux
  1. Wie entferne ich doppelte Zeilen in einer Textdatei?

  2. Entfernen Sie ungerade oder gerade Zeilen aus einer Textdatei

  3. Datei entfernen ohne zu fragen

  4. Entfernt die ersten N Zeilen aus einer aktiven Protokolldatei

  5. Verwenden von awk zum Summieren der Werte einer Spalte basierend auf den Werten einer anderen Spalte

So sortieren Sie den obersten Befehl basierend auf der Speichernutzung

Obarun – Eine Arch-basierte Linux-Distribution ohne Systemd

Linux-Shell-Sortierdatei nach der zweiten Spalte?

Auflisten von Zeilen aus nur einer Datei in DIFF

Entfernen Sie alle symbolischen Links von Dateien in einem Befehl

Wie entferne ich eine Datei ohne rm?