Rimuovere righe duplicate
apple, banana, apple, cherry, banana diventa apple, banana, cherry: tolte 2 righe ripetute e tenute 3 righe uniche nell'ordine in cui sono comparse. Può anche trattare Apple e apple come la stessa riga. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- apple banana apple cherry banana
- Testo
- apple banana cherry
- Testo originale
- apple banana apple cherry banana
- Righe originali
- 5
- Righe uniche
- 3
Le righe duplicate si infiltrano nei log, nelle mailing list, nelle colonne CSV esportate come testo semplice, negli storici della shell, nei campioni di codice incollati due volte e nelle app di note in cui lo stesso punto è stato copiato più di una volta. Pulirle a mano è lento e soggetto a errori, soprattutto quando le differenze di maiuscole nascondono veri duplicati o quando l'ordine conta e Lei deve conservare la prima apparizione anziché l'ultima. Questo strumento prende il testo multilinea che Lei inserisce, lo divide in righe e restituisce una stringa deduplicata deterministica che preserva l'ordine originale delle prime occorrenze. Può opzionalmente ignorare le maiuscole così che Apple e apple contino come la stessa riga mantenendo la prima capitalizzazione scritta. L'input vuoto viene rifiutato con un chiaro errore di validazione invece di restituire silenziosamente un risultato vuoto, proteggendo i client che hanno dimenticato di collegare un campo.
Come si tolgono le righe ripetute e l'opzione maiuscole
Il motore normalizza gli stili di ritorno a capo così che CRLF di Windows e CR nudo diventino separatori di nuova riga, poi divide la stringa a ogni a capo. Ogni riga risultante — comprese le righe vuote intenzionali — è candidata. La prima volta che una riga viene vista viene conservata con i suoi caratteri originali; ogni riga successiva che corrisponde alla chiave di confronto viene scartata.
Per impostazione predefinita il confronto è esatto: spazi, punteggiatura e maiuscole contano, quindi spazi finali o Apple versus apple sono righe diverse. I conteggi di righe rimosse e di righe uniche tornano insieme al testo pulito così dashboard e test possono verificare quanto è cambiato.
Poiché il percorso è aritmetica di parse pura sulle stringhe — una sola scansione lineare con un insieme hash delle chiavi viste — la latenza resta sotto il millisecondo per dimensioni di form tipiche e il modello di costo pubblicato è analitico anziché basato su token di modello. Non c'è matching fuzzy, soglia di distanza di edit né passo di embedding semantici; ciò spetta ad altri strumenti, come la deduplica semantica CSV quando le righe si assomigliano ma non sono uguali come testo.
Dove rimuovere le righe duplicate compare nel lavoro reale
Gli sviluppatori che puliscono frammenti di log e dump di cronologia shell hanno bisogno di un elenco unico di prima occorrenza prima di incollare in ticket o report di bug. I team dati che esportano una sola colonna come testo semplice spesso vogliono valori unici senza aprire un foglio di calcolo completo né scrivere uno script awk monouso.
Gli editor di contenuti che consolidano elenchi di tag, nomi di categoria e voci di glossario usano la modalità senza distinzione di maiuscole così che le varianti ortografiche collassino mantenendo la prima capitalizzazione preferita. Studenti e insegnanti preparano elenchi di vocabolario e set di righe di soluzione senza ripetizioni accidentali da copia-incolla. Gli amministratori di sistema uniscono blocklist e allowlist da più fonti e necessitano di un insieme unico deterministico che non riordini voci fidate precedenti.
Se in seguito serve deduplica CSV a livello di riga con chiavi di colonna, merge semantico fuzzy di righe quasi duplicate o hashing binario di immagini duplicate, le tratti come intenti di ricerca e landing separati anziché sovraccaricare questa pagina rimuovi-righe-duplicate.
Casi d'uso
Pulire frammenti di log e cronologia
Incolli log multilinea o cronologia shell e conservi la prima occorrenza di ogni riga così ticket e report restano brevi senza perdere l'ordine.
Elenchi unici di tag e vocabolario
Collassi tag o righe di glossario ripetute, ignorando opzionalmente le maiuscole, preservando la prima ortografia preferita.
Domande frequenti
Come vengono rilevate le righe duplicate?
Il testo viene diviso sugli a capo dopo aver normalizzato CRLF. Si conserva la prima occorrenza; le corrispondenze successive vengono scartate.
Le righe vuote sono preservate?
Sì. Una riga vuota è un valore di riga valido. Si conserva la prima riga vuota; le righe vuote aggiuntive sono trattate come duplicati di quella riga vuota.
Cosa succede se il testo è vuoto?
Fornisca una stringa non vuota; le caselle vuote sono errori del client e non vengono addebitate.
Quanto costa?
Lo strumento del browser è gratuito e gira in locale.
Quale copia di una riga ripetuta viene tenuta?
Sempre la prima. Le copie successive vengono eliminate e le righe rimaste mantengono l'ordine della loro prima comparsa, così le voci in cima a un elenco non si spostano mai.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/str/dedupe-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"apple\nbanana\napple\ncherry\nbanana"}'const res = await fetch("https://api.kit.forhosting.com/str/dedupe-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "apple\nbanana\napple\ncherry\nbanana"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/dedupe-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "apple\nbanana\napple\ncherry\nbanana"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/dedupe-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"apple\\nbanana\\napple\\ncherry\\nbanana"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"apple\nbanana\napple\ncherry\nbanana"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/dedupe-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "apple\nbanana\napple\ncherry\nbanana"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.dedupe_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Come funziona la deduplicazione delle righe e cosa significa ignore_case
Quando ignore_case è true, la chiave di appartenenza è la forma minuscola Unicode della riga, mentre la stringa conservata resta la prima ortografia originale che Lei ha fornito, che è l'aspettativa usuale per pulire elenchi di contatti e dump di tag senza riscrivere i titoli. Payload estremamente lunghi oltre il limite di caratteri documentato falliscono con invalid_input affinché una sola richiesta non monopolizzi la memoria del Worker.
Cosa invia e cosa riceve in risposta
Invii un campo obbligatorio chiamato text con la stringa multilinea non vuota da pulire. Numeri e booleani usati come corpo di testo vengono convertiti nelle forme decimali o true/false; oggetti, array, NaN e Infinity sono rifiutati. Il testo vuoto fallisce la validazione prima di costruire l'insieme e non viene addebitato. Sono accettati alias come input, value, data, s, message, string, content e body per comodità con client più vecchi. Opzionalmente invii ignore_case come booleano o nelle forme stringa comuni true, false, yes, no, one o zero. In caso di successo la risposta restituisce text come stringa deduplicata, original come stringa di input per eco e debug, original_lines, unique_lines, removed_lines, il flag ignore_case risolto e operation impostato a dedupe_lines. Controlli classici includono un elenco di frutti con banana e apple ripetute che collassa a tre righe uniche, un elenco a maiuscole miste che collassa ulteriormente quando ignore_case è true, e una sola riga unica che passa invariata con removed_lines uguale a zero. Il prezzo delle chiamate API riuscite è la base pubblicata di $0.002 per elemento; i fallimenti di validazione, incluso il testo vuoto, non consumano saldo prepagato.
Dove rimuovere le righe duplicate compare nel lavoro reale
Poiché questa capacità è un motore di parse puro, il prezzo API è la base pubblicata di $0.002 per elemento riuscito e la validazione fallita non consuma saldo.
Casi di integrazione
Normalizzare colonne di export come testo
Trasformi un dump di testo semplice di una colonna in un elenco di righe uniche per fixture, blocklist e QA senza aprire un foglio di calcolo.
Domande tecniche
ignore_case cambia l'ortografia conservata?
No. Solo la chiave di confronto viene messa in minuscolo. Il testo di riga conservato è sempre la prima ortografia originale che Lei ha fornito.