Ta bort dubblettrader: deduplicera text online
Klistra in valfri lista, ta bort exakta dubbletter, behåll ordningen eller sortera resultatet. Växlar för skiftläge och blanksteg ingår.
Vad det här verktyget gör
Ett gratis verktyg i webbläsaren för att ta bort dubblettrader från ett enda textblock. Klistra in din indata, välj om du vill behålla ursprunglig ordning eller sortera utdata, och dubbletterna är borta. Inget lämnar din maskin.
Det är GUI-motsvarigheten till sort -u på kommandoraden, eller awk '!seen[$0]++' när du vill behålla första förekomsten i ursprunglig ordning. Om du någonsin har klistrat in en e-postexport på 4 000 rader i en terminal bara för att köra sort | uniq, är det här samma sak utan terminal.
Deduplicering är exakt och radbaserad. Två rader måste matcha tecken för tecken (beroende på dina växlar för skiftläge och trim) för att räknas som dubbletter. Suddig matchning, nästan-dubblettdetektering och likhetspoäng är medvetet utanför scope. Annat problem, annat verktyg.
Hur dedupliceringen faktiskt fungerar här
Internt går verktyget igenom varje rad en gång och spårar sedda värden i en hashbaserad mängd, samma datastruktur som JavaScripts Set eller Pythons set. Uppslag är O(1) i snitt, så en miljon rader körs på under en sekund på en vanlig laptop. Den underliggande algoritmen är vanlig hash table-medlemskap.
Två lägen. Behåll ordning håller första förekomsten av varje rad och kastar varje senare dubblett, så som awk '!seen[$0]++' beter sig. Sortera och deduplicera sorterar först hela indata alfabetiskt och avger varje unik rad en gång, så som sort -u beter sig. Välj det din nedströmsförbrukare förväntar sig.
Det finns växlar för själva jämförelsen. Skiftlägesokänslig behandlar [email protected] och [email protected] som samma rad. Trimma blanksteg tar bort inledande och avslutande blanksteg och tabbar före jämförelsen, så " example", "example " och "example" faller samman till en post. Båda är av som standard eftersom det säkra beteendet är att matcha exakt det som skrevs.
Hur du tar bort dubblettrader i tre steg
En indatapanel, en utdatapanel. Inget laddas upp.
- 1
Klistra in dina rader
Släpp texten i indatapanelen. Vilken lista som helst funkar: e-post, IP-adresser, URL:er, SKU:er, loggtidsstämplar, paketnamn, vad som helst en per rad. Klicka på Sample för att ladda ett exempel med avsiktliga dubbletter om du vill se resultatet först.
- 2
Välj dina alternativ
Välj Behåll ordning (håller första förekomsten, som awk '!seen[$0]++') eller Sortera och deduplicera (alfabetiskt, som sort -u). Slå på Skiftlägesokänslig om Alice och alice ska smälta samman, och Trimma blanksteg om inledande eller avslutande blanksteg ska ignoreras.
- 3
Kopiera eller ladda ner resultatet
Den högra panelen visar den deduplicerade utdatan och en räkning av hur många rader som togs bort. Klicka på Copy för att hämta den, eller Download för att spara den som en .txt-fil. Båda panelerna scrollar oberoende, så du kan se vilka rader som försvann.
När du vill ha det här verktyget
Städa en marknadsförings-e-postlista före import
Exportera din lista från ett CRM, foga in en till från en webinaranmälan, klistra in båda i verktyget, deduplicera med Skiftlägesokänslig och Trimma blanksteg på. Mailchimp och HubSpot avvisar dubblettadresser vid import ändå, men de avvisar hela batchen istället för bara dubbletterna, så att göra detta först sparar en återuppladdning.
Deduplicera IP-adresser i en revisionslogg
Dra ut käll-IP:erna från en vecka av auth.log med awk, klistra in dem, deduplicera i behåll-ordning-läge. Du får en ren lista med unika angripare utan att förlora den grova kronologiska signalen om "vem dök upp först". Mata in det i din brandväggs blockeringslista.
Städa en lista med URL:er skrapade från flera sidor
Att skrapa en sitemap och ett pagineret index returnerar samma URL flera gånger. Släpp den kombinerade listan i, sortera och deduplicera, och du har en kanonisk crawl-frontier. Avslutande snedstreck och query strings räknas fortfarande som olika rader, så normalisera dem först om du vill smälta samman dem.
Minska bruset från pip freeze eller npm ls till unika paket
pip freeze över två virtualenvs, eller npm ls --all över ett monorepo, skriver ut samma paket på många rader. Sammanfoga, klistra in, deduplicera, och du har en rad per namn==version för en snabb titt på vad som faktiskt är installerat.
CSV-rader inklistrade från flera källor
Funkar för dedup på radnivå, vilket är vad du vanligtvis behöver när varje rad är en självständig post. Notera: det här är dedup av ren text, inte kolumnmedveten. Om du vill ha riktig radnivå-dedup som respekterar citerade kommatecken och ignorerar kolumnordning, använd ett riktigt CSV-verktyg. För de flesta inklistrade-från-kalkylblad-fall räcker rad-dedup.
Städa en kopierad bibliografi eller citatlista
Att kopiera referenser från tre webbläsarflikar till ett dokument lämnar dig med samma DOI upprepad fyra gånger. Klistra in, slå på Trimma blanksteg (eftersom kopiera-klistra in från PDF:er älskar att lägga till strömrande blanksteg), deduplicera, och du får en ren referenssektion. Sorteringsläget är behändigt här för alfabetiska referenslistor.
Snabbreferens för deduplicering
Kantfallen som biter oftast vid deduplicering av text. Värt att skumma igenom en gång innan du litar på utdata.
| Topic | What this tool does |
|---|
| Ordningsbevarande | Behåll-ordning håller första förekomsten och kastar senare dupes. Som awk '!seen[$0]++' eller Python list(dict.fromkeys(lines)). Sorteringsläget är alfabetiskt, som sort -u. |
|---|
| Skiftlägeskänslighet | Av som standard. Alice och alice är skilda om inte Skiftlägesokänslig är på. E-post- och användarnamnslistor vill vanligtvis ha den på; SKU-listor vanligtvis inte. |
|---|
| Trimma blanksteg | Av som standard. " example", "example " och "example" är tre olika rader tills Trimma blanksteg är på. Internt blanksteg rörs aldrig. |
|---|
| Tomma rader | Behandlas som ett vanligt radvärde: tom sträng. Med dedup på behåller du en tom rad om någon fanns i indata. För att skala bort varje tom rad, använd ett separat blanksteg-städsteg. |
|---|
| Radslut (CRLF vs LF) | En rad som slutar på \r\n är tekniskt sett annorlunda än en som slutar på \n om det avslutande \r överlever uppdelningen. Vi delar på \r?\n, så blandade slut faller samman. Om du ser spökdubletter har din indata strömrande \r-tecken mitt i raden. |
|---|
| Unicode-normalisering | Två visuellt identiska strängar kan jämföras som olika om en använder NFC och den andra NFD (förkomponerade vs uppdelade accenter). Det här verktyget normaliserar inte. Om du misstänker det, normalisera båda indata till NFC först med String.prototype.normalize('NFC') eller Python unicodedata.normalize. |
|---|
| Avslutande nyrad i slutet av indata | En fil som slutar på \n har en fantomtom sista rad. De flesta editorer döljer det här. Vi behandlar det som en tom rad, deduplicerad med andra tomma rader. Utdata bevarar en enda avslutande nyrad enligt konvention. |
|---|
| Kodning | UTF-8 hela vägen. Webbläsaren sköter avkodningen när du klistrar in; om dina bytes ursprungligen var Latin-1 eller Windows-1252 kan tecken utanför ASCII vara fel innan dedupliceringen ens kör. Konvertera kodningen uppströms. |
|---|
Ta bort dubblettrader: vanliga frågor
Behåller den ursprunglig ordning eller sorterar den utdata?
Båda, ditt val. Behåll ordning håller första förekomsten av varje rad och kastar varje senare dubblett, så utdata läses i ungefär samma ordning som indata. Sortera och deduplicera sorterar hela resultatet alfabetiskt. Behåll ordning är vad du vill när ordningen bär mening (kronologiska loggar, rangordnade listor). Sortera är vad du vill när du bara behöver en ren unik mängd.
Är jämförelsen skiftlägeskänslig?
Som standard ja, eftersom det är det säkra antagandet. Alice och alice är olika rader om du inte slår på Skiftlägesokänslig. De flesta e-postsystem behandlar adresser som skiftlägesokänsliga på den lokala delen, så för e-postlistor vill du nästan alltid ha den här växeln på. Detsamma gäller för användarnamn på skiftlägesokänsliga plattformar. För SKU:er och identifierare som verkligen är skiftlägeskänsliga, lämna den av.
Kan den ignorera inledande och avslutande blanksteg?
Ja, med Trimma blanksteg. Den tar bort inledande och avslutande blanksteg och tabbar före jämförelsen, så " example ", "example " och "example" faller samman till en post. Användbart när din indata redigerats för hand eller kopierats från en PDF, båda lämnar strömrande blanksteg. Internt blanksteg inuti en rad lämnas i fred.
Hur skiljer sig detta från Unix uniq-kommandot?
uniq-kommandot smälter bara ihop angränsande dubbletter, vilket är en vanlig överraskning. Två identiska rader åtskilda av en annan rad överlever båda uniq. Det är därför Unix-idiomet är sort | uniq eller sort -u: du måste sortera först så att dubbletterna ligger bredvid varandra. Det här verktyget behöver inte sorterad indata, eftersom det spårar varje sedd rad i en hash-mängd allteftersom det går.
Räknar det hur många dubbletter varje rad hade?
Nej, det är en annan funktion. Om du behöver räknare är Unix-kommandot uniq -c efter en sortering: sort input.txt | uniq -c | sort -rn ger en frekvenstabell sorterad efter räknare, vilket är vad du vill när du hittar de vanligaste posterna. Det här verktyget fokuserar på städning, inte analys.
Hur stor indata kan jag klistra in?
Några miljoner rader är okej. Själva dedupliceringen är O(n) med konstanttids-hash-uppslag, så flaskhalsen är webbläsaren som renderar resultatpanelen, inte dedupliceringen. För mycket stor indata (50 MB+) förvänta dig en märkbar paus när textarea ritas om. Om din indata är så stor har du nästan säkert redan sort -u till hands; använd det.
Integritet och hur det fungerar
Din text lämnar aldrig din webbläsare. Dedupliceringen körs på din maskin, lokalt, mot ett JavaScript Set. Ingen analys på din indata, inga loggar, ingen molnrundtur. Hela verktyget är några rader kod: dela på nyrader, gå igenom, behåll det vi inte sett. Standardbiblioteksprimitiverna bakom det är dokumenterade i MDN:s Set-referens och de motsvarande Python set-dokumenten.