In breve: le righe "duplicate" non sono sempre byte identici — spazi finali, maiuscole diverse o normalizzazione Unicode diversa possono nascondere duplicati esatti o crearne di falsi. Capire come funziona il confronto rende la pulizia accurata invece di cancellare per errore righe che ti servivano. Abbina questa guida a Remove Duplicate Lines, Text Difference, Word Frequency e Remove Extra Spaces.

Duplicate Finder su CharCount rimuove righe ripetute da liste, log, export CSV e liste di parole chiave. La parte complicata non è la rimozione — è decidere cosa conta come "la stessa riga" prima di rimuovere qualcosa.

Approfondimenti: il riferimento MDN su JavaScript Set spiega la struttura dati che la maggior parte degli strumenti di deduplicazione usa internamente, la guida MDN su String.normalize() copre la normalizzazione Unicode, e il report Unicode sulla segmentazione del testo (UAX #29) definisce come il testo viene diviso in unità significative.

Come trovare ed eliminare le righe duplicate nel testo, velocemente

Come funziona davvero il rilevamento dei duplicati

Sotto il cofano, uno strumento per righe duplicate scorre ogni riga e controlla se è già stata vista — di solito usando un Set, che memorizza valori unici e rifiuta i duplicati esatti in tempo costante. Questo è veloce, ma "esatto" fa molto lavoro in quella frase: un Set confronta le stringhe byte per byte, quindi "Mela" e "mela" sono voci diverse, così come "testo " e "testo" (spazio finale).

Ecco perché una deduplicazione ingenua su un export CSV o una lista di parole chiave raschiata spesso "fallisce" — non è rotta, sta confrontando esattamente quello che le hai dato, inclusi spazi invisibili e differenze di maiuscole che non avevi notato.

Preservare l'ordine vs ordinare e deduplicare

Ci sono due strategie comuni. La deduplicazione che preserva l'ordine mantiene la prima occorrenza di ogni riga e la sua posizione originale — la scelta giusta per log, chat esportate o qualsiasi cosa dove la sequenza ha significato. Ordinare e deduplicare (come la classica pipeline Unix sort | uniq) riordina tutto alfabeticamente prima, il che è più veloce su file enormi ma distrugge l'ordine originale — va bene per una lista di parole chiave, sbagliato per un changelog.

Scegli la deduplicazione che preserva l'ordine ogni volta che "cosa è venuto prima" conta; scegli ordina-e-deduplica solo quando l'ordine della lista era arbitrario in partenza.

Dove la normalizzazione cambia il conteggio

Unicode permette allo stesso carattere visibile di esistere come sequenze di byte diverse — una "é" accentata può essere un unico punto di codice composto (NFC) oppure una "e" più un segno diacritico separato (NFD). Due righe che sembrano identiche a schermo possono fallire una deduplicazione a corrispondenza esatta se una proviene da un export Mac e l'altra da uno Windows, perché sono in forme di normalizzazione diverse.

String.normalize('NFC') riduce entrambe le forme alla stessa rappresentazione prima del confronto, ed è per questo che un buon strumento per duplicati normalizza il testo prima — altrimenti sottoconta silenziosamente i duplicati che sono identici visivamente, ma non byte per byte.

Un flusso di pulizia più sicuro

  • Decidi prima: l'ordine delle righe conta per questa lista? Questo determina la strategia.
  • Rimuovi gli spazi finali e normalizza le maiuscole solo se la lista è pensata per essere case-insensitive (una lista di parole chiave spesso lo è; una lista di password mai).
  • Esegui la deduplicazione, poi controlla a campione le righe rimosse per confermare che fossero davvero duplicati.
  • Conserva il file originale finché non hai verificato la versione pulita.

Per qualsiasi caso ambiguo, passa il prima/dopo attraverso Text Difference per vedere esattamente cosa è stato rimosso, e Word Frequency per verificare che nessun termine ripetuto legittimo sia stato trattato come rumore.