0
Words
0
Characters
0
No spaces
0
Lines
0
Paragraphs
0
Sentences
0 min
Reading time
Lines with duplicates
Deduped output

Usuń zduplikowane wiersze: deduplikacja tekstu online

Wklej dowolną listę, usuń dokładne duplikaty, zachowaj kolejność lub posortuj wynik. Przełączniki wielkości liter i białych znaków w zestawie.

Co robi to narzędzie

Darmowe narzędzie w przeglądarce do usuwania zduplikowanych wierszy z jednego bloku tekstu. Wklej swoje wejście, wybierz, czy zachować pierwotną kolejność, czy posortować wyjście, a duplikaty znikają. Nic nie opuszcza twojej maszyny.

To graficzny odpowiednik sort -u z linii poleceń, albo awk '!seen[$0]++', gdy chcesz zachować pierwsze wystąpienie w pierwotnej kolejności. Jeśli kiedykolwiek wkleiłeś eksport e-maili na 4000 wierszy do terminala tylko po to, by uruchomić sort | uniq, to to samo bez terminala.

Deduplikacja jest dokładna i wierszowa. Dwa wiersze muszą pasować znak po znaku (z uwzględnieniem twoich przełączników wielkości liter i przycinania), aby liczyć się jako duplikaty. Dopasowanie rozmyte, wykrywanie prawie-duplikatów i ocena podobieństwa są celowo poza zakresem. Inny problem, inne narzędzie.

Jak deduplikacja faktycznie działa tutaj

Wewnętrznie narzędzie obchodzi każdy wiersz raz i śledzi widziane wartości w zbiorze opartym na hashu, tej samej strukturze danych co Set w JavaScripcie albo set w Pythonie. Wyszukiwania są średnio O(1), więc milion wierszy działa w mniej niż sekundę na zwykłym laptopie. Algorytm pod spodem to zwykłe sprawdzanie przynależności do hash table.

Dwa tryby. Zachowaj kolejność trzyma pierwsze wystąpienie każdego wiersza i odrzuca każdy późniejszy duplikat, tak jak zachowuje się awk '!seen[$0]++'. Posortuj i deduplikuj najpierw sortuje całe wejście alfabetycznie i wypuszcza każdy unikalny wiersz raz, tak jak sort -u. Wybierz to, czego oczekuje twój odbiorca w dół.

Są przełączniki dla samego porównania. Bez rozróżniania wielkości liter traktuje [email protected] i [email protected] jako ten sam wiersz. Przytnij białe znaki usuwa wiodące i końcowe spacje oraz tabulatory przed porównaniem, więc " example", "example " i "example" zwijają się do jednej pozycji. Oba są domyślnie wyłączone, bo bezpieczne zachowanie to dokładne dopasowanie tego, co wpisano.

Jak usunąć zduplikowane wiersze w trzech krokach

Jeden panel wejściowy, jeden panel wyjściowy. Nic nie jest wysyłane.

  1. 1

    Wklej swoje wiersze

    Wrzuć tekst do panelu wejściowego. Każda lista zadziała: e-maile, IP, URL-e, SKU, znaczniki czasu logów, nazwy pakietów, cokolwiek po jednym na wiersz. Kliknij Sample, aby załadować przykład z celowymi duplikatami, jeśli chcesz najpierw zobaczyć wynik.

  2. 2

    Wybierz opcje

    Wybierz Zachowaj kolejność (trzyma pierwsze wystąpienie, jak awk '!seen[$0]++') lub Posortuj i deduplikuj (alfabetycznie, jak sort -u). Włącz Bez rozróżniania wielkości liter, jeśli Alice i alice mają się zlać, oraz Przytnij białe znaki, jeśli wiodące lub końcowe spacje mają być ignorowane.

  3. 3

    Skopiuj lub pobierz wynik

    Prawy panel pokazuje zdeduplikowane wyjście i licznik usuniętych wierszy. Kliknij Copy, aby go pobrać, albo Download, aby zapisać jako plik .txt. Oba panele przewijają się niezależnie, więc widać, które wiersze zniknęły.

Kiedy zechcesz tego narzędzia

Czyszczenie marketingowej listy e-maili przed importem

Wyeksportuj listę z jednego CRM, dorzuć drugą z zapisów na webinar, wklej obie do narzędzia, deduplikuj z Bez rozróżniania wielkości liter i Przytnij białe znaki włączonymi. Mailchimp i HubSpot i tak odrzucają zduplikowane adresy przy imporcie, ale odrzucają całą partię zamiast samych duplikatów, więc zrobienie tego najpierw oszczędza ponowne przesyłanie.

Deduplikacja adresów IP w logu audytu

Wyciągnij źródłowe IP z tygodnia auth.log przy pomocy awk, wklej je, deduplikuj w trybie zachowaj-kolejność. Dostajesz czystą listę unikalnych napastników bez utraty grubego chronologicznego sygnału "kto się pokazał pierwszy". Wrzuć to na listę blokad firewalla.

Czyszczenie listy URL-i zeskrobanych z wielu stron

Skrobanie sitemapy i indeksu z paginacją zwróci ten sam URL wiele razy. Wrzuć połączoną listę, posortuj i deduplikuj, i masz kanoniczną granicę crawlowania. Końcowe ukośniki i query stringi nadal liczą się jako różne wiersze, więc znormalizuj je najpierw, jeśli chcesz je scalić.

Redukcja szumu pip freeze lub npm ls do unikalnych pakietów

pip freeze w dwóch virtualenvach, albo npm ls --all w monorepo, drukuje ten sam pakiet w wielu wierszach. Połącz, wklej, deduplikuj, i masz jeden wiersz na nazwa==wersja dla szybkiego rzutu okiem na to, co naprawdę zainstalowane.

Wiersze CSV wklejone z wielu źródeł

Działa dla deduplikacji na poziomie wiersza, czego zwykle potrzebujesz, gdy każdy wiersz jest samowystarczalnym rekordem. Uwaga: to deduplikacja zwykłego tekstu, nie świadoma kolumn. Jeśli chcesz prawdziwej deduplikacji wierszowej, która szanuje przecinki w cudzysłowach i ignoruje kolejność kolumn, użyj prawdziwego narzędzia CSV. Dla większości przypadków wklejonych z arkusza, deduplikacja wierszowa wystarcza.

Czyszczenie skopiowanej bibliografii lub listy cytowań

Skopiowanie referencji z trzech kart przeglądarki do jednego dokumentu zostawia cię z tym samym DOI powtórzonym cztery razy. Wklej, włącz Przytnij białe znaki (bo kopiowanie z PDF-ów uwielbia dodawać błądzące spacje), deduplikuj, i dostajesz czystą sekcję referencji. Tryb sortowania jest tu poręczny dla alfabetycznych list referencji.

Szybka referencja deduplikacji

Przypadki brzegowe, które najczęściej kąsają przy deduplikacji tekstu. Warto przejrzeć raz przed zaufaniem wyjściu.

TopicWhat this tool does
Zachowanie kolejnościZachowaj-kolejność trzyma pierwsze wystąpienie i odrzuca późniejsze duplikaty. Jak awk '!seen[$0]++' albo Python list(dict.fromkeys(lines)). Tryb sortowania jest alfabetyczny, jak sort -u.
Czułość na wielkość literDomyślnie wyłączona. Alice i alice są odrębne, chyba że Bez rozróżniania wielkości liter jest włączone. Listy e-maili i nazw użytkowników zwykle chcą włączone; listy SKU zwykle nie.
Przycinanie białych znakówDomyślnie wyłączone. " example", "example " i "example" to trzy różne wiersze, dopóki Przytnij białe znaki nie jest włączone. Wewnętrzne spacje nigdy nie są ruszane.
Puste wierszeTraktowane jako zwykła wartość wiersza: pusty łańcuch. Z deduplikacją włączoną zostaje jeden pusty wiersz, jeśli jakiś był na wejściu. Aby usunąć każdy pusty wiersz, użyj osobnego kroku czyszczenia białych znaków.
Końce wierszy (CRLF vs LF)Wiersz kończący się \r\n jest technicznie inny od kończącego się \n, jeśli końcowy \r przeżyje podział. Dzielimy na \r?\n, więc mieszane końce się zwijają. Jeśli widzisz duchowe duplikaty, twoje wejście ma błądzące znaki \r w środku wiersza.
Normalizacja UnicodeDwa wizualnie identyczne łańcuchy mogą porównać się nierówno, jeśli jeden używa NFC, a drugi NFD (akcenty prekomponowane vs zdekomponowane). To narzędzie nie normalizuje. Jeśli to podejrzewasz, znormalizuj oba wejścia najpierw do NFC za pomocą String.prototype.normalize('NFC') albo unicodedata.normalize w Pythonie.
Końcowy znak nowej linii na końcu wejściaPlik kończący się \n ma fantomowy pusty ostatni wiersz. Większość edytorów to ukrywa. Traktujemy to jako jeden pusty wiersz, deduplikowany z innymi pustymi wierszami. Wyjście zachowuje pojedynczy końcowy znak nowej linii zgodnie z konwencją.
KodowanieUTF-8 wszędzie. Przeglądarka zajmuje się dekodowaniem przy wklejaniu; jeśli twoje bajty były pierwotnie Latin-1 lub Windows-1252, znaki spoza ASCII mogą być błędne, zanim deduplikacja w ogóle ruszy. Konwertuj kodowanie wcześniej w łańcuchu.

Usuń zduplikowane wiersze: często zadawane pytania

Czy zachowuje pierwotną kolejność, czy sortuje wyjście?

Oba, twój wybór. Zachowaj kolejność trzyma pierwsze wystąpienie każdego wiersza i odrzuca każdy późniejszy duplikat, więc wyjście czyta się mniej więcej w tej samej kolejności co wejście. Posortuj i deduplikuj sortuje cały wynik alfabetycznie. Zachowaj kolejność jest tym, czego chcesz, gdy kolejność niesie znaczenie (logi chronologiczne, listy z rankingiem). Sortuj jest tym, czego chcesz, gdy potrzebujesz tylko czystego unikalnego zbioru.

Czy porównanie rozróżnia wielkość liter?

Domyślnie tak, bo to bezpieczne założenie. Alice i alice to różne wiersze, chyba że włączysz Bez rozróżniania wielkości liter. Większość systemów e-mail traktuje adresy jako nieczułe na wielkość liter w części lokalnej, więc dla list e-maili prawie zawsze chcesz mieć ten przełącznik włączony. To samo dla nazw użytkowników na platformach nieczułych na wielkość liter. Dla SKU i identyfikatorów rzeczywiście czułych na wielkość liter, zostaw wyłączone.

Czy może ignorować wiodące i końcowe białe znaki?

Tak, z Przytnij białe znaki. Usuwa wiodące i końcowe spacje oraz tabulatory przed porównaniem, więc " example ", "example " i "example" zwijają się do jednej pozycji. Przydatne, gdy twoje wejście było edytowane ręcznie albo skopiowane z PDF-a, oba zostawiają błądzące spacje. Wewnętrzne białe znaki w wierszu są zostawiane w spokoju.

Czym to różni się od uniksowego polecenia uniq?

Polecenie uniq zwija tylko sąsiadujące duplikaty, co jest częstą niespodzianką. Dwa identyczne wiersze rozdzielone innym wierszem oba przeżywają uniq. Dlatego idiomem uniksowym jest sort | uniq albo sort -u: trzeba najpierw posortować, by duplikaty były obok siebie. To narzędzie nie potrzebuje posortowanego wejścia, bo śledzi każdy widziany wiersz w hash secie w trakcie pracy.

Czy liczy, ile duplikatów miał każdy wiersz?

Nie, to inna funkcja. Jeśli potrzebujesz liczników, polecenie uniksowe to uniq -c po sortowaniu: sort input.txt | uniq -c | sort -rn daje tabelę częstości posortowaną według licznika, czyli to, czego chcesz przy szukaniu najczęstszych pozycji. To narzędzie skupia się na czyszczeniu, nie na analizie.

Jak duże wejście mogę wkleić?

Kilka milionów wierszy w porządku. Sama deduplikacja jest O(n) ze stałoczasowymi wyszukiwaniami hash, więc wąskim gardłem jest przeglądarka renderująca panel wyniku, nie deduplikacja. Dla bardzo dużych wejść (50 MB+) spodziewaj się zauważalnej pauzy, gdy textarea się odświeża. Jeśli twoje wejście jest tak duże, prawie na pewno masz już sort -u pod ręką; użyj go.

Prywatność i jak to działa

Twój tekst nigdy nie opuszcza przeglądarki. Deduplikacja działa na twojej maszynie, lokalnie, na Set z JavaScripta. Bez analityki na twoim wejściu, bez logów, bez wycieczki do chmury. Całe narzędzie to kilka wierszy kodu: podziel po znakach nowej linii, przejdź, zachowaj to, czego nie widzieliśmy. Standardowe biblioteczne prymitywy za tym są udokumentowane w referencji Set w MDN i odpowiedniej dokumentacji set w Pythonie.