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

Fjern dupliserte linjer: dedupliser tekst på nett

Lim inn en hvilken som helst liste, fjern eksakte duplikater, behold rekkefølgen eller sorter resultatet. Brytere for store/små bokstaver og mellomrom inkludert.

Hva dette verktøyet gjør

Et gratis verktøy i nettleseren for å fjerne dupliserte linjer fra én enkelt tekstblokk. Lim inn input, velg om du vil bevare den opprinnelige rekkefølgen eller sortere utdata, og duplikatene er borte. Ingenting forlater maskinen din.

Det er GUI-ekvivalenten til sort -u på kommandolinjen, eller til awk '!seen[$0]++' når du vil beholde første forekomst i opprinnelig rekkefølge. Hvis du noen gang har limt inn en e-posteksport på 4 000 linjer i en terminal bare for å kjøre sort | uniq, er dette det samme uten terminalen.

Deduplisering er nøyaktig og linjebasert. To linjer må matche tegn for tegn (avhengig av brytere for store/små bokstaver og trim) for å telle som duplikater. Uskarp matching, nesten-duplikatdeteksjon og likhetsskår er bevisst utenfor scope. Annet problem, annet verktøy.

Hvordan dedupliseringen faktisk virker her

Internt går verktøyet gjennom hver linje én gang og holder oversikt over sette verdier i en hash-basert mengde, samme datastruktur som JavaScripts Set eller Pythons set. Oppslag er O(1) i snitt, så en million linjer kjører på under et sekund på en vanlig laptop. Den underliggende algoritmen er vanlig hash table-medlemskap.

To moduser. Behold rekkefølge beholder første forekomst av hver linje og kaster hver senere duplikat, slik awk '!seen[$0]++' oppfører seg. Sorter og dedupliser sorterer først hele input alfabetisk og sender ut hver unike linje én gang, slik sort -u oppfører seg. Velg det nedstrømsforbrukeren din forventer.

Det er brytere for selve sammenligningen. Uavhengig av store/små bokstaver behandler [email protected] og [email protected] som samme linje. Trim mellomrom fjerner innledende og avsluttende mellomrom og tabulatorer før sammenligning, så " example", "example " og "example" faller sammen til én oppføring. Begge er av som standard fordi den trygge oppførselen er å matche nøyaktig det som ble skrevet.

Slik fjerner du dupliserte linjer i tre trinn

Ett inndatapanel, ett utdatapanel. Ingenting lastes opp.

  1. 1

    Lim inn linjene dine

    Slipp teksten i inndatapanelet. Hvilken som helst liste fungerer: e-poster, IP-er, URL-er, SKU-er, loggtidsstempler, pakkenavn, hva som helst én per linje. Klikk på Sample for å laste et eksempel med tilsiktede duplikater hvis du vil se resultatet først.

  2. 2

    Velg alternativer

    Velg Behold rekkefølge (beholder første forekomst, som awk '!seen[$0]++') eller Sorter og dedupliser (alfabetisk, som sort -u). Slå på Uavhengig av store/små bokstaver hvis Alice og alice skal smelte sammen, og Trim mellomrom hvis innledende eller avsluttende mellomrom skal ignoreres.

  3. 3

    Kopier eller last ned resultatet

    Det høyre panelet viser den dedupliserte utdataen og en telling av hvor mange linjer som ble fjernet. Klikk Copy for å hente det, eller Download for å lagre det som en .txt-fil. Begge panelene scroller uavhengig, så du kan se hvilke linjer som forsvant.

Når du vil ha dette verktøyet

Rydde i en markedsførings-e-postliste før import

Eksporter listen din fra ett CRM, skyt inn en til fra en webinarpåmelding, lim begge inn i verktøyet, dedupliser med Uavhengig av store/små bogstaver og Trim mellomrom på. Mailchimp og HubSpot avviser uansett dupliserte adresser ved import, men de avviser hele batchen i stedet for bare duplikatene, så å gjøre dette først sparer en ny opplasting.

Deduplisere IP-adresser i en revisjonslogg

Trekk ut kilde-IP-ene fra en uke med auth.log ved hjelp av awk, lim dem inn, dedupliser i behold-rekkefølge-modus. Du får en ren liste med unike angripere uten å miste det grove kronologiske signalet om "hvem dukket opp først". Mate det inn i blokkeringslisten til brannmuren din.

Rydde i en liste med URL-er skrapet fra flere sider

Å skrape et sitemap og en paginert indeks vil returnere samme URL flere ganger. Slipp den kombinerte listen i, sorter og dedupliser, og du har en kanonisk crawl-grense. Avsluttende skråstreker og query-strenger telles fortsatt som forskjellige linjer, så normaliser dem først hvis du vil slå dem sammen.

Redusere støy fra pip freeze eller npm ls til unike pakker

pip freeze på tvers av to virtualenvs, eller npm ls --all på tvers av et monorepo, skriver ut samme pakke på mange linjer. Slå sammen, lim inn, dedupliser, og du har én linje per navn==versjon for et raskt overblikk over hva som faktisk er installert.

CSV-rader limt inn fra flere kilder

Funker for dedup på linjenivå, som er det du vanligvis trenger når hver rad er en selvstendig post. Merk: dette er dedup av rein tekst, ikke kolonnebevisst. Hvis du vil ha ekte radnivå-dedup som respekterer siterte komma og ignorerer kolonnerekkefølge, bruk et ekte CSV-verktøy. For de fleste limt-fra-regneark-tilfeller er linje-dedup nok.

Rydde i en kopiert bibliografi eller sitatliste

Å kopiere referanser fra tre nettleserfaner inn i ett dokument etterlater deg med samme DOI gjentatt fire ganger. Lim inn, slå på Trim mellomrom (fordi kopier-lim-inn fra PDF-er elsker å legge til løse mellomrom), dedupliser, og du får en ren referanseseksjon. Sorter-modus er praktisk her for alfabetiske referanselister.

Dedup-hurtigreferanse

Kanttilfellene som biter oftest ved deduplisering av tekst. Verdt å skumme én gang før du stoler på utdataen.

TopicWhat this tool does
Bevaring av rekkefølgeBehold-rekkefølge beholder første forekomst og kaster senere dupes. Som awk '!seen[$0]++' eller Python list(dict.fromkeys(lines)). Sorter-modus er alfabetisk, som sort -u.
Skille mellom store/små bokstaverAv som standard. Alice og alice er forskjellige med mindre Uavhengig av store/små bokstaver er på. E-post- og brukernavnslister vil typisk ha den på; SKU-lister typisk ikke.
Trimming av mellomromAv som standard. " example", "example " og "example" er tre forskjellige linjer til Trim mellomrom er på. Internt mellomrom blir aldri rørt.
Tomme linjerBehandles som en vanlig linjeverdi: tom streng. Med dedup på beholder du én tom linje hvis det fantes noen i inndataen. For å fjerne enhver tom linje, bruk et eget mellomrom-oppryddingstrinn.
Linjeskift (CRLF vs LF)En linje som slutter på \r\n er teknisk forskjellig fra en som slutter på \n hvis det avsluttende \r overlever delingen. Vi deler på \r?\n, så blandede linjeslutninger faller sammen. Hvis du ser spøkelsesduplikater, har inndataen din løse \r-tegn midt i linjen.
Unicode-normaliseringTo visuelt identiske strenger kan sammenlignes som ulike hvis den ene bruker NFC og den andre NFD (forhåndskomponerte vs dekomponerte aksenter). Dette verktøyet normaliserer ikke. Hvis du mistenker det, normaliser begge inndata til NFC først med String.prototype.normalize('NFC') eller Python unicodedata.normalize.
Avsluttende linjeskift på slutten av inndataEn fil som slutter på \n har en fantomtom siste linje. De fleste editorer skjuler dette. Vi behandler det som én tom linje, deduplisert med eventuelle andre tomme linjer. Utdata bevarer et enkelt avsluttende linjeskift som konvensjon.
KodingUTF-8 hele veien. Nettleseren håndterer dekoding når du limer inn; hvis bytene dine opprinnelig var Latin-1 eller Windows-1252, kan tegn utenfor ASCII være feil før dedupen overhodet kjører. Konverter kodingen oppstrøms.

Fjern dupliserte linjer: ofte stilte spørsmål

Bevarer den den opprinnelige rekkefølgen eller sorterer utdataen?

Begge deler, ditt valg. Behold rekkefølge beholder første forekomst av hver linje og kaster hver senere duplikat, så utdataen leses i omtrent samme rekkefølge som inndataen. Sorter og dedupliser sorterer hele resultatet alfabetisk. Behold rekkefølge er det du vil ha når rekkefølgen bærer mening (kronologiske logger, rangerte lister). Sorter er det du vil ha når du bare trenger et rent unikt sett.

Skiller sammenligningen mellom store og små bokstaver?

Som standard ja, fordi det er den trygge antakelsen. Alice og alice er forskjellige linjer med mindre du slår på Uavhengig av store/små bokstaver. De fleste e-postsystemer behandler adresser som uavhengige av store/små bokstaver i den lokale delen, så for e-postlister vil du nesten alltid ha denne bryteren på. Det samme gjelder for brukernavn på plattformer som er uavhengige av store/små bokstaver. For SKU-er og identifikatorer som virkelig er avhengige av store/små bokstaver, la den være av.

Kan den ignorere innledende og avsluttende mellomrom?

Ja, med Trim mellomrom. Den fjerner innledende og avsluttende mellomrom og tabulatorer før sammenligning, så " example ", "example " og "example" faller sammen til én oppføring. Nyttig når inndataen din er redigert for hånd eller kopiert fra en PDF, begge etterlater løse mellomrom. Internt mellomrom inne i en linje lar vi være.

Hvordan skiller dette seg fra Unix-kommandoen uniq?

Kommandoen uniq slår bare sammen tilstøtende duplikater, en vanlig overraskelse. To identiske linjer adskilt av en annen linje overlever begge uniq. Derfor er Unix-idiomet sort | uniq eller sort -u: du må sortere først så duplikater ligger ved siden av hverandre. Dette verktøyet trenger ikke sortert inndata, fordi det holder oversikt over hver sett linje i en hash-mengde mens det går.

Teller den hvor mange duplikater hver linje hadde?

Nei, det er en annen funksjon. Hvis du trenger tellinger, er Unix-kommandoen uniq -c etter en sortering: sort input.txt | uniq -c | sort -rn gir en frekvenstabell sortert etter antall, som er det du vil ha når du finner de hyppigste oppføringene. Dette verktøyet fokuserer på opprydding, ikke analyse.

Hvor stor inndata kan jeg lime inn?

Et par millioner linjer er greit. Selve dedupen er O(n) med konstanttids-hash-oppslag, så flaskehalsen er nettleseren som rendrer resultatpanelet, ikke dedupen. For svært store inndata (50 MB+) forvent en merkbar pause når textarea tegnes om. Hvis inndataen din er så stor, har du nesten helt sikkert allerede sort -u for hånden; bruk det.

Personvern og hvordan dette virker

Teksten din forlater aldri nettleseren din. Dedupen kjører på maskinen din, lokalt, mot et JavaScript Set. Ingen analyse på inndataen din, ingen logger, ingen tur til skyen. Hele verktøyet er noen få linjer kode: del på linjeskift, gå gjennom, behold det vi ikke har sett. Standardbiblioteksprimitivene bak det er dokumentert i MDNs Set-referanse og de tilsvarende Python set-dokumentene.