Skip to main content

Remove Duplicate Lines

Remove duplicate lines from text with case-sensitive and sorting options.

Geprüft von · Zuletzt geprüft

Den Duplikate-Zeilen-Entferner verwenden

  1. Die Liste in den Eingabebereich einfügen - ein Eintrag pro Zeile. CSV-Zeilen, E-Mails, Log-Einträge, URLs oder jegliche durch Zeilenumbrüche getrennte Inhalte sind alle in Ordnung.
  2. Die Optionen umschalten, die zu deinen Daten passen: Groß-/Kleinschreibung beachten hält Benutzer und benutzer getrennt, Leerzeichen entfernen ignoriert führendes und nachstehendes Leerzeichen beim Vergleich, Ausgabe sortieren ordnet die Überlebenden alphabetisch an.
  3. Die Statistik-Karte lesen, die über der Ausgabe erscheint: ursprüngliche Zeilenanzahl, eindeutige Zeilenanzahl und die Anzahl der verworfenen Duplikate.
  4. Die bereinigte Ausgabe kopieren mit der Kopierschaltfläche. Das Ergebnis behält standardmäßig die ursprüngliche Reihenfolge bei - das erste Auftreten gewinnt und spätere Kopien werden verworfen.
  5. Das Ergebnis zurück einfügen in deine Tabellenkalkulation, den Datenbankimport oder den Texteditor. Das Tool verändert die ursprüngliche Eingabe nicht, sodass du die Optionen anpassen und so oft neu ausführen kannst, wie nötig.

Wie die Deduplizierung funktioniert

Das Tool teilt die Eingabe an \\n auf und durchläuft dann das resultierende Array, während es ein JavaScript-Set aufbaut, das nach der normalisierten Form jeder Zeile geordnet ist. Die Normalisierung ist günstig: ein toLowerCase-Aufruf, wenn Groß-/Kleinschreibung-ignorierend-Modus aktiv ist, und ein trim-Aufruf, wenn Leerzeichen-Modus aktiv ist. Das erste Mal, dass ein Schlüssel im Set erscheint, wird die ursprüngliche (un-normalisierte) Zeile in das Ausgabe-Array gepusht; jedes spätere Auftreten wird übersprungen. Das ergibt Erste-gesehen-gewinnt-Semantik mit O(n) Zeit und O(n) Speicher, wobei n die Anzahl der Zeilen ist. Sortierung, wenn aktiviert, führt Array.prototype.sort auf den Überlebenden mit dem Standard-Code-Punkt-Vergleicher aus, der deterministisch und locale-agnostisch ist. Die gesamte Transformation läuft synchron im Browser-Tab - kein Worker, kein Server-Roundtrip.

Wann du das verwenden würdest

  • Bereinigen eines Newsletter-Abonnenten-Exports vor dem Hochladen zu deinem E-Mail-Service-Anbieter, damit Duplikate deine Abmelderate nicht aufblähen.
  • Eine Liste von Domains oder IPs deduplizieren, die aus mehreren Log-Quellen gezogen wurden, bevor sie in eine Firewall-Deny-Liste weitergeleitet werden.
  • Eine Einkaufswagen-Produktliste bereinigen, bei der Scraper manchmal dieselbe SKU zweimal ausgeben.
  • Einen sortierten, aber verrauschten journalctl-Dump komprimieren, damit wiederholte Fehlerzeilen das Signal nicht ertränken.
  • Eine Wortliste für einen Sicherheitstest vorbereiten, bei dem nur eindeutige Kandidaten für den Cracker nützlich sind.
  • CSV-Zeilen konsolidieren, die aus zwei verschiedenen Dashboards exportiert wurden, bei denen der Primärschlüssel identisch ist, die Zeilen aber zweimal erscheinen.

Häufige Fallstricke und Sonderfälle

  • Nachstehende Leerzeichen-Unterschiede. Zwei Zeilen, die auf dem Bildschirm identisch aussehen, können sich durch ein nachstehendes Leerzeichen oder Tabulator unterscheiden, was sie standardmäßig getrennt hält. Aktiviere Leerzeichen entfernen, um sie als Duplikate zu behandeln.
  • Typografische Anführungszeichen und weiche Bindestriche. Kopieren und Einfügen aus einem Textverarbeitungsprogramm führt oft U+2019 (typografisches Apostroph) oder U+00AD (weiches Bindestrich) ein, die zwei Zeilen als verschieden erscheinen lassen. Der Unsichtbare-Zeichen-Detektor auf dieser Website wird sie anzeigen.
  • Gemischte Zeilenenden. DOS-artige CRLF-Zeilen haben ein nachstehendes \\r, das sie von nur-LF-Duplikaten unterscheidet. Aktiviere den Leerzeichen-Modus oder normalisiere die Eingabe zuerst.
  • Sortierte Ausgabe ändert die Erste-gesehen-Reihenfolge. Wenn du Sortierung aktivierst, wird die "Erste-Auftreten-gewinnt"-Garantie während der Deduplizierung beibehalten, aber die Überlebenden werden dann alphabetisch neu angeordnet.
  • Nicht-ASCII-Sortierreihenfolge. Die Standard-Sortierung verwendet UTF-16-Code-Einheiten, sodass Unicode-Zeichen in Code-Punkt-Reihenfolge landen statt in sprachlicher Reihenfolge. Für locale-bewusste Sortierung verwende das Text-Sortiertool auf dieser Website.
  • Leerzeilen zählen. Leere Zeilen werden als Zeilen mit leerem Inhalt behandelt; mehrere Leerzeilen werden unter Deduplizierung auf eine einzige Leerzeile zusammengefasst.

Einzigartigkeit als Mengenoperation

Was du hier berechnet, ist die mathematische Menge aus einer Multimenge: Gegeben eine Sequenz mit Wiederholung, erzeuge die zugrundeliegende Sammlung verschiedener Elemente. In relationalen Datenbanken ist das SELECT DISTINCT. In der Shell ist das die Kombination sort | uniq - der sort-Schritt ist erforderlich, weil uniq nur benachbarte Duplikate zusammenfasst. Der effizientere awk '!seen[$0]++'-Idiom tut genau das, was dieses Tool tut: eine Hash-Menge, die nach der Zeile geordnet ist, druckt jede Zeile das erste Mal, wenn ihr Schlüssel noch nicht gesehen wurde, in der streamenden Erste-gesehen-Reihenfolge. Dieser Einzeiler ist ein Klassiker in Unix-Toolchains, weil er die Reihenfolge ohne vollständige Sortierung bewahrt. POSIX definiert uniq in IEEE Std 1003.1, und die Flags -u, -d und -c erlauben dir, nur Eindeutige, nur Duplikate oder Zähler anzuzeigen.

Vergleich mit Alternativen

sort -u datei ist der kanonische Unix-Einzeiler und läuft in O(n log n) Zeit mit locale-bewusster Sortierung, wenn dein LC_ALL gesetzt ist. awk '!seen[$0]++' läuft in O(n), verwendet aber Speicher proportional zur Anzahl der verschiedenen Zeilen, was nur bei Multi-Gigabyte-Eingaben ein Problem ist. Für CSV-Dateien, bei denen Duplikate durch bestimmte Spalten und nicht durch die gesamte Zeile definiert sind, sind csvdedupe von csvkit oder ein SQL-Import mit einer DISTINCT ON-Klausel das Richtige. Excel hat eine Duplikate-entfernen-Schaltfläche unter dem Daten-Tab, die Mehrspaltenschlüssel mit einer schönen UI verarbeitet. Verwende dieses Web-Tool, wenn deine Liste kurz bis mittel ist (bis zu einigen hunderttausend Zeilen), du Groß-/Kleinschreibung-Ignorierung oder Leerzeichen-Entfernung ohne das Erstellen eines Regex umschalten möchtest und keinen Terminal öffnen möchtest - besonders auf einem gesperrten Arbeits-Laptop.

Häufig gestellte Fragen

Behält das Tool die Reihenfolge des ersten Vorkommens bei?

Ja, standardmäßig. Der Deduplizierungs-Durchlauf geht die Eingabe von oben nach unten durch und behält das erste Mal, das jede Zeile erscheint, bei und überspringt jedes spätere Duplikat. Das entspricht dem Verhalten von <code>awk !seen[$0]++</code> in der Befehlszeile. Die Aktivierung der Sortier-Option weist das Tool an, die Überlebenden nach der Deduplizierung alphabetisch neu anzuordnen, was die ursprüngliche Reihenfolge verwirft, aber oft das ist, was du für prüfungsfreundliche Ausgabe möchtest.

Warum sehen zwei Zeilen identisch aus, zählen aber immer noch als verschieden?

Der Vergleich ist byte-genau, es sei denn, du entscheidest dich für die Normalisierung. Häufige Ursachen sind ein nachstehendes Leerzeichen oder Tabulator, ein CRLF-Zeilenende gegenüber einem LF-Zeilenende, ein geschütztes Leerzeichen U+00A0, das sich als normales Leerzeichen tarnt, oder ein typografisches Anf. U+2019, das ein ASCII-Apostroph ersetzt. Aktiviere "Leerzeichen entfernen", um führende und nachstehende Leerzeichen beim Vergleich zu ignorieren; führe die Eingabe durch den Unsichtbare-Zeichen-Detektor, wenn du versteckte Unicode-Zeichen vermutst.

Wird meine Liste zum Verarbeiten hochgeladen?

Nein. Die Deduplizierung ist ein JavaScript-Funktionsaufruf innerhalb deines Browser-Tabs. Die Set-Datenstruktur, String-Methoden und Array-Operationen alle werden lokal in V8, SpiderMonkey oder JavaScriptCore abhängig von deinem Browser ausgeführt. Es gibt keinen Fetch, kein Worker, kein Analytics-Pixel, das Zeilen erfasst, und das Schließen des Tabs gibt die Zeichenketten an die Garbage Collection frei. Du kannst dich nach dem Laden der Seite vom Netzwerk trennen und weiterhin deduplizieren.

Kann ich nur bestimmte Spalten einer CSV deduplizieren?

Nicht direkt - dieses Tool behandelt jede Zeile als einen einzigen undurchsichtigen Schlüssel. Für CSV-Dedup nach mehreren Spalten gibt es zwei Optionen: die CSV vorverarbeiten, um die Schlüsselspalte in eine eigene Datei zu extrahieren, oder ein dediziertes Tool wie <code>csvdedupe -c Spaltenname</code> von csvkit verwenden, oder die CSV in SQLite importieren und <code>SELECT DISTINCT col FROM t</code> ausführen. Für einfache Fälle, bei denen die gesamte Zeile der Schlüssel ist, funktioniert dieses Tool perfekt.

Wie funktioniert die Sortierreihenfolge für Emoji und nicht-lateinischen Text?

Die Standard-Sortierung verwendet Array.prototype.sort ohne Vergleichsfunktion, was UTF-16-Code-Einheiten vergleicht. Das gibt dir Code-Punkt-Reihenfolge, keine sprachliche Reihenfolge: Großbuchstaben vor Kleinbuchstaben, ASCII vor akzentuierten Zeichen und Emojis nach ihrer Unicode-Block-Zuweisung gruppiert. Für locale-bewusste Sortierung, die deutsche Umlaute, tschechische Akzente oder chinesisches Pinyin verarbeitet, verwende das Text-Sortiertool auf dieser Website, das um Intl.Collator herum gebaut ist.

Was passiert bei einer Million-Zeilen-Eingabe?

Eine Million kurze Zeilen werden in deutlich unter einer Sekunde auf einem modernen Laptop dedupliziert, weil das zugrundeliegende Set eine Hash-Tabelle verwendet. Der Browser könnte kurz pausieren, während der Ausgabe-Textbereich gerendert wird, weil das der teure Schritt ist. Wenn du routinemäßig so große Dateien bereinigst, erwäge <code>awk !seen[$0]++</code> im Terminal - es streamt statt alles auf einmal in den Arbeitsspeicher zu laden.

Wie behalte ich nur Duplikate und verwerfe Einzelstücke?

Die Ausgabe dieses Tools ist der Eindeutige-Zeilen-Satz. Für das Gegenteil - Zeilen finden, die mehr als einmal erschienen sind - verwende das POSIX-Tool <code>uniq -d</code> in einer sortierten Datei (<code>sort datei | uniq -d</code>), oder den awk-Einzeiler <code>awk '++count[$0] == 2' datei</code>. Viele Tabellenkalkulationstools haben auch eine Duplikat-Hervorhebungsoption unter bedingter Formatierung, die beim Untersuchen hilft, warum Duplikate erschienen sind.

Gibt es einen Unterschied zwischen diesem und sort -u?

Semantisch keinen, wenn du die Sortier-Option dieses Tools aktivierst. Aber <code>sort -u</code> sortiert zuerst und dedupliziert dann, was bedeutet, dass die Überlebenden in sortierter Reihenfolge sind und die Erste-Auftreten- Garantie verloren geht. Dieses Tool behält standardmäßig die Erste-Auftreten- Reihenfolge bei, was <code>awk !seen[$0]++</code> in der Shell bietet. Wähle diejenige, die der Erwartung deines nachgelagerten Konsumenten entspricht.

Was ist, wenn meine Zeilen Unicode-Kompositionsunterschiede haben?

Ein Zeichen wie e-mit-Akut kann als einzelner Code-Punkt U+00E9 (NFC-Form) oder als e gefolgt vom kombinierenden Akut-Akzent U+0301 (NFD-Form) codiert sein. Sie rendern identisch, haben aber unterschiedliche Byte- Sequenzen, sodass der Standardvergleich sie als verschieden behandelt. Wenn du Eingaben aus verschiedenen Quellen mischst, führe sie zuerst durch <code>String.prototype.normalize("NFC")</code>; dieses Tool normalisiert nicht automatisch, weil die Normalisierung selbst eine Überraschungsquelle sein kann.

Beeinflusst der Leerzeichen-Modus die Ausgabe selbst?

Nein. Der Leerzeichen-Modus beeinflusst nur den Vergleich - die Ausgabe behält die ursprüngliche Zeile genau so, wie sie eingefügt wurde, einschließlich führender oder nachstehender Leerzeichen. Also vergleichen "hallo" und "hallo " bei aktiviertem Leerzeichen-Modus als Duplikate, und diejenige, die zuerst in der Eingabe erschien, wird in die Ausgabe geschrieben, Leerzeichen und alles. Wenn du die Ausgabe ebenfalls bereinigt haben möchtest, gehe anschließend durch das Leerzeichen-Entfernen-Tool.

Mehr Text Tools