{"id":24,"date":"2026-06-24T21:56:50","date_gmt":"2026-06-24T21:56:50","guid":{"rendered":"https:\/\/toolskit.site\/index.php\/remove-duplicate-lines-tool\/"},"modified":"2026-06-24T21:56:50","modified_gmt":"2026-06-24T21:56:50","slug":"remove-duplicate-lines-tool","status":"publish","type":"page","link":"https:\/\/toolskit.site\/index.php\/remove-duplicate-lines-tool\/","title":{"rendered":"Remove Duplicate Lines Tool"},"content":{"rendered":"<div class=\"hth-single-tool-shell\" style=\"--hth-color:#ff6d00\">\n<div id=\"rdl-ultimate-wrapper\">\n<style>#rdl-ultimate-wrapper{display:block;font-family:system-ui,'Segoe UI Emoji','Apple Color Emoji','Noto Color Emoji',sans-serif;line-height:1.5;color:#e0e0e0}#rdl-ultimate-wrapper *,#rdl-ultimate-wrapper *::before,#rdl-ultimate-wrapper *::after{box-sizing:border-box;margin:0;padding:0}#rdl-ultimate-wrapper .tool-container{width:100%;max-width:960px;margin:20px auto;background:radial-gradient(circle at 30% 40%,#1f1f35,#0b0b16);border:1px solid rgba(0,229,255,0.15);border-radius:44px;padding:35px 30px;box-shadow:0 25px 70px rgba(0,0,0,0.8),0 0 50px rgba(0,229,255,0.05);animation:rdl-popIn 0.65s cubic-bezier(0.175,0.885,0.32,1.275)}@keyframes rdl-popIn{0%{opacity:0;transform:scale(0.93) translateY(35px)}100%{opacity:1;transform:scale(1) translateY(0)}}#rdl-ultimate-wrapper .header{text-align:center;margin-bottom:28px}#rdl-ultimate-wrapper .icon{font-size:48px;animation:rdl-bounce 2s infinite;line-height:1}@keyframes rdl-bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}#rdl-ultimate-wrapper h1{font-size:clamp(28px,6vw,40px);font-weight:800;background:linear-gradient(to right,#00e5ff,#7c4dff,#ff80ab);-webkit-background-clip:text;-webkit-text-fill-color:transparent!important;background-clip:text;color:transparent;margin:8px 0 6px}#rdl-ultimate-wrapper .subtitle{color:#aaa;font-size:15px}#rdl-ultimate-wrapper .panels{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}@media(max-width:700px){#rdl-ultimate-wrapper .panels{grid-template-columns:1fr}}#rdl-ultimate-wrapper .panel-label{font-size:13px;color:#888;text-transform:uppercase;letter-spacing:0.8px;margin-bottom:8px;display:flex;align-items:center;gap:6px}#rdl-ultimate-wrapper textarea{width:100%;min-height:200px;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);border-radius:24px;color:#fff;padding:16px;font-size:14px;font-family:inherit;resize:vertical;outline:none;transition:border 0.3s}#rdl-ultimate-wrapper textarea:focus{border-color:#7c4dff;box-shadow:0 0 25px rgba(124,77,255,0.2)}#rdl-ultimate-wrapper .options-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:18px 0}#rdl-ultimate-wrapper .option-item{display:flex;align-items:center;gap:8px;font-size:13px;color:#ccc}#rdl-ultimate-wrapper input[type=\"checkbox\"],#rdl-ultimate-wrapper input[type=\"radio\"]{accent-color:#00e5ff;width:16px;height:16px;cursor:pointer}#rdl-ultimate-wrapper select{background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.2);border-radius:25px;padding:8px 30px 8px 14px;color:#fff;font-size:13px;font-weight:500;outline:none;cursor:pointer;appearance:none;background-image:url(\"data:image\/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cpath d='M1 1L6 6L11 1' stroke='%23aaa' stroke-width='2' stroke-linecap='round'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 12px center;background-size:12px;font-family:inherit}#rdl-ultimate-wrapper select option{background:#1a1a2e;color:#fff;padding:8px}#rdl-ultimate-wrapper .btn-group{display:flex;gap:12px;flex-wrap:wrap;margin:18px 0 12px}#rdl-ultimate-wrapper button{background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.12);color:#ddd;padding:10px 20px;border-radius:30px;cursor:pointer;font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;transition:0.3s;font-family:inherit}#rdl-ultimate-wrapper button:hover{background:rgba(124,77,255,0.2);border-color:#7c4dff;transform:translateY(-2px)}#rdl-ultimate-wrapper button.primary{background:linear-gradient(135deg,#7c4dff,#00e5ff);border:none;color:#000;font-weight:700}#rdl-ultimate-wrapper button.primary:hover{box-shadow:0 8px 20px rgba(0,229,255,0.3)}#rdl-ultimate-wrapper .stats-panel{background:rgba(255,255,255,0.03);border-radius:20px;padding:16px 20px;margin-top:15px;display:flex;flex-wrap:wrap;gap:25px;font-size:14px;color:#ccc;border:1px solid rgba(255,255,255,0.05)}#rdl-ultimate-wrapper .stat-item{display:flex;align-items:center;gap:6px}#rdl-ultimate-wrapper .stat-value{color:#00e5ff;font-weight:700}#rdl-ultimate-wrapper .duplicate-list-box{margin-top:16px;background:rgba(0,0,0,0.3);border-radius:18px;padding:16px;max-height:200px;overflow-y:auto;font-size:13px;border:1px solid rgba(255,255,255,0.05);display:none}#rdl-ultimate-wrapper .dup-line{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid rgba(255,255,255,0.03)}@media(max-width:500px){#rdl-ultimate-wrapper .tool-container{padding:22px 16px}#rdl-ultimate-wrapper button{padding:8px 16px;font-size:12px}}<\/style>\n<div class=\"tool-container\">\n<div class=\"header\">\n<div class=\"icon\">&#x1F9F9;<\/div>\n<h1>Remove Duplicate Lines<\/h1>\n<div class=\"subtitle\">Advanced deduplication \u00b7 Sort \u00b7 Find duplicates \u00b7 Export<\/div>\n<\/div>\n<div class=\"panels\">\n<div>\n<div class=\"panel-label\">&#x1F4E5; Input Text<\/div>\n<p><textarea id=\"rdlInput\" placeholder=\"Paste your text with duplicate lines here...\"><\/textarea><\/div>\n<div>\n<div class=\"panel-label\">&#x1F4E4; Cleaned Output<\/div>\n<p><textarea id=\"rdlOutput\" placeholder=\"Unique lines will appear here...\" readonly><\/textarea><\/div>\n<\/div>\n<div class=\"options-grid\"><label class=\"option-item\"><input type=\"checkbox\" id=\"rdlCaseSensitive\"> Case Sensitive<\/label><label class=\"option-item\"><input type=\"checkbox\" id=\"rdlTrimSpaces\" checked> Trim Spaces<\/label><label class=\"option-item\"><input type=\"checkbox\" id=\"rdlIgnoreEmpty\"> Ignore Empty Lines<\/label><\/p>\n<div class=\"option-item\"><span style=\"color:#aaa;\">Order:<\/span><label><input type=\"radio\" name=\"rdlOrder\" value=\"first\" checked> Keep First<\/label><label style=\"margin-left:6px;\"><input type=\"radio\" name=\"rdlOrder\" value=\"last\"> Keep Last<\/label><\/div>\n<div class=\"option-item\"><span style=\"color:#aaa;\">Sort:<\/span><select id=\"rdlSort\"><option value=\"none\">None<\/option><option value=\"asc\">A \u2192 Z<\/option><option value=\"desc\">Z \u2192 A<\/option><\/select><\/div>\n<\/div>\n<div class=\"btn-group\"><button class=\"primary\" id=\"rdlRemoveBtn\">&#x1F9F9; Remove Duplicates<\/button><button id=\"rdlFindDupBtn\">&#x1F50D; Show Duplicates<\/button><button id=\"rdlCopyBtn\">&#x1F4CB; Copy<\/button><button id=\"rdlDownloadBtn\">&#x1F4BE; Download<\/button><button id=\"rdlSwapBtn\">&#x1F503; Swap<\/button><button id=\"rdlClearBtn\">&#x1F5D1;&#xFE0F; Clear All<\/button><\/div>\n<div class=\"stats-panel\">\n<div class=\"stat-item\">Total lines: <span class=\"stat-value\" id=\"rdlTotalLines\">0<\/span><\/div>\n<div class=\"stat-item\">Unique lines: <span class=\"stat-value\" id=\"rdlUniqueLines\">0<\/span><\/div>\n<div class=\"stat-item\">Duplicates removed: <span class=\"stat-value\" id=\"rdlDupRemoved\">0<\/span><\/div>\n<\/div>\n<div class=\"duplicate-list-box\" id=\"rdlDuplicateList\">\n<div style=\"display:flex;justify-content:space-between;margin-bottom:8px;\"><span style=\"color:#ccc;\">&#x1F4CB; Duplicate Lines &amp; Counts<\/span><button style=\"background:none;border:none;color:#ff5252;cursor:pointer;font-size:16px;\" id=\"rdlCloseDup\">&#x2716;<\/button><\/div>\n<div id=\"rdlDupContent\"><\/div>\n<\/div>\n<\/div>\n<p><script>(function(){const input=document.getElementById('rdlInput');const output=document.getElementById('rdlOutput');const caseSensitive=document.getElementById('rdlCaseSensitive');const trimSpaces=document.getElementById('rdlTrimSpaces');const ignoreEmpty=document.getElementById('rdlIgnoreEmpty');const orderRadios=document.getElementsByName('rdlOrder');const sortSelect=document.getElementById('rdlSort');const totalLinesEl=document.getElementById('rdlTotalLines');const uniqueLinesEl=document.getElementById('rdlUniqueLines');const dupRemovedEl=document.getElementById('rdlDupRemoved');const duplicateListBox=document.getElementById('rdlDuplicateList');const dupContent=document.getElementById('rdlDupContent');function getOrder(){for(const radio of orderRadios){if(radio.checked)return radio.value}return'first'}function processLines(){const text=input.value;let lines=text.split(\/r?n\/);if(trimSpaces.checked){lines=lines.map(l=>l.trim())}if(ignoreEmpty.checked){lines=lines.filter(l=>l.length>0)}const total=lines.length;totalLinesEl.textContent=total;const keyFn=caseSensitive.checked?(l)=>l:(l)=>l.toLowerCase();let uniqueLines;if(getOrder()==='first'){const seen=new Map();uniqueLines=[];for(const line of lines){const key=keyFn(line);if(!seen.has(key)){seen.set(key,line);uniqueLines.push(line)}}}else{const seen=new Map();const temp=[];for(let i=lines.length-1;i>=0;i--){const line=lines[i];const key=keyFn(line);if(!seen.has(key)){seen.set(key,line);temp.push(line)}}uniqueLines=temp.reverse()}const uniqueCount=uniqueLines.length;uniqueLinesEl.textContent=uniqueCount;dupRemovedEl.textContent=total-uniqueCount;if(sortSelect.value==='asc'){uniqueLines.sort((a,b)=>a.localeCompare(b))}else if(sortSelect.value==='desc'){uniqueLines.sort((a,b)=>b.localeCompare(a))}output.value=uniqueLines.join('n')}function findDuplicates(){const text=input.value;let lines=text.split(\/r?n\/);if(trimSpaces.checked)lines=lines.map(l=>l.trim());if(ignoreEmpty.checked)lines=lines.filter(l=>l.length>0);const keyFn=caseSensitive.checked?(l)=>l:(l)=>l.toLowerCase();const map=new Map();for(const line of lines){const key=keyFn(line);if(!map.has(key))map.set(key,{count:0,line});map.get(key).count++}const duplicates=Array.from(map.values()).filter(v=>v.count>1);if(duplicates.length===0){dupContent.innerHTML='<span style=\"color:#888;\">No duplicate lines found.<\/span>'}else{dupContent.innerHTML=duplicates.map(d=>'<\/p>\n<div class=\"dup-line\"><span>'+escapeHTML(d.line)+'<\/span> <span style=\"color:#ff80ab;\">'+d.count+' times<\/span><\/div>\n<p>').join('')}duplicateListBox.style.display='block'}function escapeHTML(str){return str.replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;')}document.getElementById('rdlRemoveBtn').addEventListener('click',processLines);document.getElementById('rdlFindDupBtn').addEventListener('click',findDuplicates);document.getElementById('rdlCopyBtn').addEventListener('click',()=>{const res=output.value;if(!res.trim())return;navigator.clipboard.writeText(res).then(()=>{const btn=document.getElementById('rdlCopyBtn');btn.textContent='u2705 Copied!';setTimeout(()=>btn.textContent='u{1F4CB} Copy',1500)})});document.getElementById('rdlDownloadBtn').addEventListener('click',()=>{const res=output.value;if(!res.trim())return;const blob=new Blob([res],{type:'text\/plain'});const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='unique-lines.txt';a.click();URL.revokeObjectURL(a.href)});document.getElementById('rdlSwapBtn').addEventListener('click',()=>{const temp=input.value;input.value=output.value;output.value=temp;processLines()});document.getElementById('rdlClearBtn').addEventListener('click',()=>{input.value='';output.value='';totalLinesEl.textContent='0';uniqueLinesEl.textContent='0';dupRemovedEl.textContent='0';duplicateListBox.style.display='none'});document.getElementById('rdlCloseDup').addEventListener('click',()=>{duplicateListBox.style.display='none'});input.value='applenbanananApplenbananancherry';processLines()})();<\/script><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Remove duplicate lines with advanced options: case sensitivity, trim spaces, keep first\/last, sort A-Z\/Z-A, find duplicates, copy, download, and live stats.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-24","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/pages\/24","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/comments?post=24"}],"version-history":[{"count":0,"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/pages\/24\/revisions"}],"wp:attachment":[{"href":"https:\/\/toolskit.site\/index.php\/wp-json\/wp\/v2\/media?parent=24"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}