{"id":292,"date":"2025-07-26T09:43:33","date_gmt":"2025-07-26T09:43:33","guid":{"rendered":"https:\/\/vijaypandit.in\/?page_id=292"},"modified":"2025-07-26T13:39:37","modified_gmt":"2025-07-26T13:39:37","slug":"remove-duplicate-lines","status":"publish","type":"page","link":"https:\/\/vijaypandit.in\/?page_id=292","title":{"rendered":"Remove Duplicate Lines"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Remove Duplicate Lines Tool<\/title>\n    <style>\n        .gp-remove-duplicates-container {\n            max-width: 1200px !important;\n            margin: 20px auto !important;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;\n            color: #000 !important;\n            line-height: 1.6 !important;\n        }\n\n        .gp-remove-duplicates-header {\n            background: #FAF9F5 !important;\n            padding: 40px 30px !important;\n            border-radius: 12px !important;\n            text-align: center !important;\n            margin-bottom: 30px !important;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.05) !important;\n        }\n\n        .gp-remove-duplicates-title {\n            font-size: 2.5em !important;\n            font-weight: 900 !important;\n            color: #000 !important;\n            margin: 0 0 20px 0 !important;\n            text-shadow: 1px 1px 2px rgba(0,0,0,0.1) !important;\n        }\n\n        .gp-remove-duplicates-description {\n            background: #CBCADC !important;\n            border-left: 5px solid #D97757 !important;\n            padding: 20px !important;\n            border-radius: 8px !important;\n            font-weight: 700 !important;\n            color: #000 !important;\n            font-size: 1.1em !important;\n            max-width: 800px !important;\n            margin: 0 auto !important;\n            min-height: 60px !important;\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n        }\n\n        .gp-remove-duplicates-main {\n            display: grid !important;\n            grid-template-columns: 1fr 300px !important;\n            gap: 30px !important;\n            margin-bottom: 30px !important;\n        }\n\n        .gp-remove-duplicates-input-section {\n            background: #fff !important;\n            border: 2px solid #e1e1e1 !important;\n            border-radius: 12px !important;\n            padding: 25px !important;\n            box-shadow: 0 4px 15px rgba(0,0,0,0.08) !important;\n        }\n\n        .gp-remove-duplicates-controls {\n            background: #fff !important;\n            border: 2px solid #e1e1e1 !important;\n            border-radius: 12px !important;\n            padding: 25px !important;\n            box-shadow: 0 4px 15px rgba(0,0,0,0.08) !important;\n            height: fit-content !important;\n        }\n\n        .gp-remove-duplicates-label {\n            font-weight: 700 !important;\n            color: #000 !important;\n            font-size: 1.2em !important;\n            margin-bottom: 15px !important;\n            display: block !important;\n        }\n\n        .gp-remove-duplicates-textarea {\n            width: 100% !important;\n            height: 300px !important;\n            padding: 15px !important;\n            border: 2px solid #ddd !important;\n            border-radius: 8px !important;\n            font-family: 'Courier New', monospace !important;\n            font-size: 14px !important;\n            resize: vertical !important;\n            background: #fff !important;\n            color: #000 !important;\n            font-weight: 600 !important;\n            box-sizing: border-box !important;\n            transition: border-color 0.2s ease !important;\n        }\n\n        .gp-remove-duplicates-textarea:focus {\n            outline: none !important;\n            border-color: #D97757 !important;\n            box-shadow: 0 0 0 3px rgba(217, 119, 87, 0.1) !important;\n        }\n\n        .gp-remove-duplicates-button {\n            background: #000 !important;\n            color: #fff !important;\n            border: none !important;\n            padding: 12px 20px !important;\n            border-radius: 8px !important;\n            font-weight: 700 !important;\n            font-size: 14px !important;\n            cursor: pointer !important;\n            transition: all 0.2s ease !important;\n            width: 100% !important;\n            margin-bottom: 15px !important;\n            text-transform: uppercase !important;\n            letter-spacing: 0.5px !important;\n        }\n\n        .gp-remove-duplicates-button:hover {\n            background: #333 !important;\n            transform: translateY(-1px) !important;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.2) !important;\n        }\n\n        .gp-remove-duplicates-button:active {\n            transform: translateY(0) !important;\n        }\n\n        .gp-remove-duplicates-stats {\n            background: #f8f8f8 !important;\n            padding: 20px !important;\n            border-radius: 8px !important;\n            margin-bottom: 20px !important;\n            border: 2px solid #e1e1e1 !important;\n        }\n\n        .gp-remove-duplicates-stat-item {\n            display: flex !important;\n            justify-content: space-between !important;\n            margin-bottom: 10px !important;\n            font-weight: 700 !important;\n            color: #000 !important;\n        }\n\n        .gp-remove-duplicates-stat-number {\n            color: #D97757 !important;\n            font-weight: 900 !important;\n        }\n\n        .gp-remove-duplicates-options {\n            margin-bottom: 25px !important;\n        }\n\n        .gp-remove-duplicates-checkbox-group {\n            display: flex !important;\n            align-items: center !important;\n            margin-bottom: 15px !important;\n        }\n\n        .gp-remove-duplicates-checkbox {\n            margin-right: 10px !important;\n            transform: scale(1.2) !important;\n        }\n\n        .gp-remove-duplicates-checkbox-label {\n            font-weight: 700 !important;\n            color: #000 !important;\n            cursor: pointer !important;\n        }\n\n        .gp-remove-duplicates-footer {\n            background: #000 !important;\n            color: #fff !important;\n            padding: 20px !important;\n            border-radius: 12px !important;\n            display: flex !important;\n            justify-content: center !important;\n            gap: 15px !important;\n            flex-wrap: wrap !important;\n        }\n\n        .gp-remove-duplicates-footer-btn {\n            background: transparent !important;\n            color: #fff !important;\n            border: 2px solid #fff !important;\n            padding: 10px 15px !important;\n            border-radius: 6px !important;\n            font-weight: 700 !important;\n            cursor: pointer !important;\n            transition: all 0.2s ease !important;\n            font-size: 12px !important;\n            text-transform: uppercase !important;\n        }\n\n        .gp-remove-duplicates-footer-btn:hover {\n            background: #fff !important;\n            color: #000 !important;\n        }\n\n        .gp-remove-duplicates-success {\n            position: fixed !important;\n            top: 20px !important;\n            right: 20px !important;\n            background: #4CAF50 !important;\n            color: #fff !important;\n            padding: 15px 20px !important;\n            border-radius: 8px !important;\n            font-weight: 700 !important;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.3) !important;\n            z-index: 10000 !important;\n            transform: translateX(400px) !important;\n            transition: transform 0.3s ease !important;\n        }\n\n        .gp-remove-duplicates-success.show {\n            transform: translateX(0) !important;\n        }\n\n        @media (max-width: 768px) {\n            .gp-remove-duplicates-container {\n                margin: 10px !important;\n            }\n            \n            .gp-remove-duplicates-main {\n                grid-template-columns: 1fr !important;\n                gap: 20px !important;\n            }\n            \n            .gp-remove-duplicates-header {\n                padding: 25px 20px !important;\n            }\n            \n            .gp-remove-duplicates-title {\n                font-size: 2em !important;\n            }\n            \n            .gp-remove-duplicates-textarea {\n                height: 250px !important;\n            }\n            \n            .gp-remove-duplicates-footer {\n                flex-direction: column !important;\n                gap: 10px !important;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"gp-remove-duplicates-container\">\n        <div class=\"gp-remove-duplicates-header\">\n            <h2 class=\"gp-remove-duplicates-title\">\ud83d\udd27 Remove Duplicate Lines<\/h2>\n            <div class=\"gp-remove-duplicates-description\" id=\"gp-remove-duplicates-tip\">\n                Clean up your text by removing duplicate lines instantly. Perfect for cleaning lists, code, and data.\n            <\/div>\n        <\/div>\n\n        <div class=\"gp-remove-duplicates-main\">\n            <div class=\"gp-remove-duplicates-input-section\">\n                <label class=\"gp-remove-duplicates-label\" for=\"gp-remove-duplicates-input\">\ud83d\udcdd Input Text<\/label>\n                <textarea \n                    id=\"gp-remove-duplicates-input\" \n                    class=\"gp-remove-duplicates-textarea\"\n                    placeholder=\"Paste your text with duplicate lines here...&#10;Line 1&#10;Line 2&#10;Line 1&#10;Line 3&#10;Line 2\"\n                ><\/textarea>\n\n                <label class=\"gp-remove-duplicates-label\" for=\"gp-remove-duplicates-output\" style=\"margin-top: 20px;\">\u2728 Clean Output<\/label>\n                <textarea \n                    id=\"gp-remove-duplicates-output\" \n                    class=\"gp-remove-duplicates-textarea\"\n                    placeholder=\"Your cleaned text will appear here...\"\n                    readonly\n                ><\/textarea>\n            <\/div>\n\n            <div class=\"gp-remove-duplicates-controls\">\n                <div class=\"gp-remove-duplicates-stats\">\n                    <div class=\"gp-remove-duplicates-stat-item\">\n                        <span>Total Lines:<\/span>\n                        <span class=\"gp-remove-duplicates-stat-number\" id=\"gp-remove-duplicates-total\">0<\/span>\n                    <\/div>\n                    <div class=\"gp-remove-duplicates-stat-item\">\n                        <span>Unique Lines:<\/span>\n                        <span class=\"gp-remove-duplicates-stat-number\" id=\"gp-remove-duplicates-unique\">0<\/span>\n                    <\/div>\n                    <div class=\"gp-remove-duplicates-stat-item\">\n                        <span>Duplicates Removed:<\/span>\n                        <span class=\"gp-remove-duplicates-stat-number\" id=\"gp-remove-duplicates-removed\">0<\/span>\n                    <\/div>\n                <\/div>\n\n                <div class=\"gp-remove-duplicates-options\">\n                    <div class=\"gp-remove-duplicates-checkbox-group\">\n                        <input type=\"checkbox\" id=\"gp-remove-duplicates-case\" class=\"gp-remove-duplicates-checkbox\" checked>\n                        <label for=\"gp-remove-duplicates-case\" class=\"gp-remove-duplicates-checkbox-label\">Case Sensitive<\/label>\n                    <\/div>\n                    <div class=\"gp-remove-duplicates-checkbox-group\">\n                        <input type=\"checkbox\" id=\"gp-remove-duplicates-trim\" class=\"gp-remove-duplicates-checkbox\" checked>\n                        <label for=\"gp-remove-duplicates-trim\" class=\"gp-remove-duplicates-checkbox-label\">Trim Whitespace<\/label>\n                    <\/div>\n                    <div class=\"gp-remove-duplicates-checkbox-group\">\n                        <input type=\"checkbox\" id=\"gp-remove-duplicates-empty\" class=\"gp-remove-duplicates-checkbox\" checked>\n                        <label for=\"gp-remove-duplicates-empty\" class=\"gp-remove-duplicates-checkbox-label\">Remove Empty Lines<\/label>\n                    <\/div>\n                <\/div>\n\n                <button class=\"gp-remove-duplicates-button\" onclick=\"gpRemoveDuplicatesProcess()\">\n                    \ud83d\ude80 Remove Duplicates\n                <\/button>\n                <button class=\"gp-remove-duplicates-button\" onclick=\"gpRemoveDuplicatesCopy()\">\n                    \ud83d\udccb Copy Result\n                <\/button>\n                <button class=\"gp-remove-duplicates-button\" onclick=\"gpRemoveDuplicatesDownload()\">\n                    \ud83d\udcbe Download\n                <\/button>\n                <button class=\"gp-remove-duplicates-button\" onclick=\"gpRemoveDuplicatesClear()\">\n                    \ud83d\uddd1\ufe0f Clear All\n                <\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"gp-remove-duplicates-footer\">\n            <button class=\"gp-remove-duplicates-footer-btn\" onclick=\"gpRemoveDuplicatesSort()\">Sort Lines<\/button>\n            <button class=\"gp-remove-duplicates-footer-btn\" onclick=\"gpRemoveDuplicatesReverse()\">Reverse Order<\/button>\n            <button class=\"gp-remove-duplicates-footer-btn\" onclick=\"gpRemoveDuplicatesShowDuplicates()\">Show Duplicates<\/button>\n            <button class=\"gp-remove-duplicates-footer-btn\" onclick=\"gpRemoveDuplicatesExample()\">Load Example<\/button>\n        <\/div>\n\n        <div id=\"gp-remove-duplicates-success\" class=\"gp-remove-duplicates-success\">\n            Action completed successfully!\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ Educational tips rotation\n        const gpRemoveDuplicatesTips = [\n            \"Clean up your text by removing duplicate lines instantly. Perfect for cleaning lists, code, and data.\",\n            \"Use case-sensitive mode to distinguish between 'Apple' and 'apple' as different lines.\",\n            \"Trim whitespace option removes leading and trailing spaces before comparison.\",\n            \"Remove empty lines to clean up your text and eliminate blank spaces.\",\n            \"Sort your lines alphabetically after removing duplicates for better organization.\",\n            \"Perfect for cleaning email lists, removing duplicate URLs, or organizing data files.\",\n            \"Works great with CSV data, code snippets, and any line-based text format.\"\n        ];\n\n        let gpRemoveDuplicatesTipIndex = 0;\n\n        function gpRemoveDuplicatesRotateTips() {\n            const tipElement = document.getElementById('gp-remove-duplicates-tip');\n            if (tipElement) {\n                tipElement.style.opacity = '0.5';\n                setTimeout(() => {\n                    gpRemoveDuplicatesTipIndex = (gpRemoveDuplicatesTipIndex + 1) % gpRemoveDuplicatesTips.length;\n                    tipElement.textContent = gpRemoveDuplicatesTips[gpRemoveDuplicatesTipIndex];\n                    tipElement.style.opacity = '1';\n                }, 200);\n            }\n        }\n\n        \/\/ Start tip rotation\n        setInterval(gpRemoveDuplicatesRotateTips, 6000);\n\n        \/\/ Real-time processing\n        document.getElementById('gp-remove-duplicates-input').addEventListener('input', gpRemoveDuplicatesProcess);\n        document.getElementById('gp-remove-duplicates-case').addEventListener('change', gpRemoveDuplicatesProcess);\n        document.getElementById('gp-remove-duplicates-trim').addEventListener('change', gpRemoveDuplicatesProcess);\n        document.getElementById('gp-remove-duplicates-empty').addEventListener('change', gpRemoveDuplicatesProcess);\n\n        function gpRemoveDuplicatesProcess() {\n            const input = document.getElementById('gp-remove-duplicates-input').value;\n            const caseSensitive = document.getElementById('gp-remove-duplicates-case').checked;\n            const trimWhitespace = document.getElementById('gp-remove-duplicates-trim').checked;\n            const removeEmpty = document.getElementById('gp-remove-duplicates-empty').checked;\n\n            if (!input.trim()) {\n                gpRemoveDuplicatesUpdateStats(0, 0, 0);\n                document.getElementById('gp-remove-duplicates-output').value = '';\n                return;\n            }\n\n            let lines = input.split('\\n');\n            const totalLines = lines.length;\n\n            \/\/ Process lines based on options\n            if (trimWhitespace) {\n                lines = lines.map(line => line.trim());\n            }\n\n            if (removeEmpty) {\n                lines = lines.filter(line => line.length > 0);\n            }\n\n            \/\/ Remove duplicates\n            const seen = new Set();\n            const uniqueLines = [];\n\n            lines.forEach(line => {\n                const compareValue = caseSensitive ? line : line.toLowerCase();\n                if (!seen.has(compareValue)) {\n                    seen.add(compareValue);\n                    uniqueLines.push(line);\n                }\n            });\n\n            const result = uniqueLines.join('\\n');\n            document.getElementById('gp-remove-duplicates-output').value = result;\n\n            const uniqueCount = uniqueLines.length;\n            const removedCount = totalLines - uniqueCount;\n\n            gpRemoveDuplicatesUpdateStats(totalLines, uniqueCount, removedCount);\n        }\n\n        function gpRemoveDuplicatesUpdateStats(total, unique, removed) {\n            document.getElementById('gp-remove-duplicates-total').textContent = total;\n            document.getElementById('gp-remove-duplicates-unique').textContent = unique;\n            document.getElementById('gp-remove-duplicates-removed').textContent = removed;\n        }\n\n        function gpRemoveDuplicatesCopy() {\n            const output = document.getElementById('gp-remove-duplicates-output');\n            if (output.value) {\n                output.select();\n                document.execCommand('copy');\n                gpRemoveDuplicatesShowSuccess('Copied to clipboard!');\n            } else {\n                gpRemoveDuplicatesShowSuccess('Nothing to copy!');\n            }\n        }\n\n        function gpRemoveDuplicatesDownload() {\n            const output = document.getElementById('gp-remove-duplicates-output').value;\n            if (!output) {\n                gpRemoveDuplicatesShowSuccess('Nothing to download!');\n                return;\n            }\n\n            const blob = new Blob([output], { type: 'text\/plain' });\n            const url = URL.createObjectURL(blob);\n            const a = document.createElement('a');\n            a.href = url;\n            a.download = 'cleaned-text.txt';\n            document.body.appendChild(a);\n            a.click();\n            document.body.removeChild(a);\n            URL.revokeObjectURL(url);\n            gpRemoveDuplicatesShowSuccess('File downloaded!');\n        }\n\n        function gpRemoveDuplicatesClear() {\n            document.getElementById('gp-remove-duplicates-input').value = '';\n            document.getElementById('gp-remove-duplicates-output').value = '';\n            gpRemoveDuplicatesUpdateStats(0, 0, 0);\n            gpRemoveDuplicatesShowSuccess('Cleared all text!');\n        }\n\n        function gpRemoveDuplicatesSort() {\n            const output = document.getElementById('gp-remove-duplicates-output');\n            if (output.value) {\n                const lines = output.value.split('\\n').sort();\n                output.value = lines.join('\\n');\n                gpRemoveDuplicatesShowSuccess('Lines sorted alphabetically!');\n            }\n        }\n\n        function gpRemoveDuplicatesReverse() {\n            const output = document.getElementById('gp-remove-duplicates-output');\n            if (output.value) {\n                const lines = output.value.split('\\n').reverse();\n                output.value = lines.join('\\n');\n                gpRemoveDuplicatesShowSuccess('Order reversed!');\n            }\n        }\n\n        function gpRemoveDuplicatesShowDuplicates() {\n            const input = document.getElementById('gp-remove-duplicates-input').value;\n            if (!input.trim()) {\n                gpRemoveDuplicatesShowSuccess('No input to analyze!');\n                return;\n            }\n\n            const caseSensitive = document.getElementById('gp-remove-duplicates-case').checked;\n            const trimWhitespace = document.getElementById('gp-remove-duplicates-trim').checked;\n            \n            let lines = input.split('\\n');\n            \n            if (trimWhitespace) {\n                lines = lines.map(line => line.trim());\n            }\n\n            const seen = new Set();\n            const duplicates = new Set();\n\n            lines.forEach(line => {\n                const compareValue = caseSensitive ? line : line.toLowerCase();\n                if (seen.has(compareValue)) {\n                    duplicates.add(line);\n                } else {\n                    seen.add(compareValue);\n                }\n            });\n\n            const output = document.getElementById('gp-remove-duplicates-output');\n            if (duplicates.size > 0) {\n                output.value = Array.from(duplicates).join('\\n');\n                gpRemoveDuplicatesShowSuccess(`Found ${duplicates.size} duplicate lines!`);\n            } else {\n                output.value = '';\n                gpRemoveDuplicatesShowSuccess('No duplicates found!');\n            }\n        }\n\n        function gpRemoveDuplicatesExample() {\n            const example = `apple\nbanana\ncherry\napple\ndate\nbanana\nelderberry\nfig\ncherry\ngrape\napple\nbanana`;\n            \n            document.getElementById('gp-remove-duplicates-input').value = example;\n            gpRemoveDuplicatesProcess();\n            gpRemoveDuplicatesShowSuccess('Example loaded!');\n        }\n\n        function gpRemoveDuplicatesShowSuccess(message) {\n            const successDiv = document.getElementById('gp-remove-duplicates-success');\n            successDiv.textContent = message;\n            successDiv.classList.add('show');\n            \n            setTimeout(() => {\n                successDiv.classList.remove('show');\n            }, 3000);\n        }\n\n        \/\/ Initialize with example on page load\n        window.addEventListener('load', () => {\n            setTimeout(gpRemoveDuplicatesExample, 500);\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Remove Duplicate Lines Tool \ud83d\udd27 Remove Duplicate Lines Clean up your text by removing duplicate lines instantly. Perfect for cleaning &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"Remove Duplicate Lines\" class=\"read-more button\" href=\"https:\/\/vijaypandit.in\/?page_id=292#more-292\" aria-label=\"More on Remove Duplicate Lines\">Read more<\/a><\/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-292","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/pages\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vijaypandit.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=292"}],"version-history":[{"count":1,"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/pages\/292\/revisions"}],"predecessor-version":[{"id":293,"href":"https:\/\/vijaypandit.in\/index.php?rest_route=\/wp\/v2\/pages\/292\/revisions\/293"}],"wp:attachment":[{"href":"https:\/\/vijaypandit.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}