blog / text-tools

How to Remove Duplicate Lines from Any Text File

· 2 min read

Duplicate lines represent a frequent data cleaning challenge across log analysis, email list hygiene, CSV processing, and code refactoring. Cleaning duplicate lines ensures data integrity prior to database importation or statistical analysis.

Method 1: Instant Client-Side Deduplication

For quick manual text processing, use the Remove Duplicate Lines tool on TextUtils. Paste your uncleaned text to strip recurring lines in real time while preserving the original sequence of first occurrences. Execution is 100% client-side: no text leaves your machine.

Method 2: Command Line Utilities (Linux / macOS / WSL)

Standard Unix shells offer powerful built-in utilities for text processing:

# Sort and eliminate duplicates (output is re-ordered alphabetically)
sort input.txt | uniq > output.txt

# Preserve original line ordering while removing duplicates (GNU AWK)
awk '!seen[$0]++' input.txt > output.txt

While sort | uniq requires sorting the input first (which changes original sequence), awk '!seen[$0]++' utilizes a hash map in memory to record encountered lines, allowing it to print only the first instance of each line in order.

Method 3: PowerShell (Windows)

On Windows PowerShell, use Get-Content with Select-Object -Unique:

# Deduplicate preserving order in PowerShell
Get-Content input.txt | Select-Object -Unique | Set-Content output.txt

Method 4: Python Scripting

For automated data pipelines or large files:

with open('input.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

seen = set()
unique_lines = []
for line in lines:
    key = line.rstrip('\r\n')
    if key not in seen:
        seen.add(key)
        unique_lines.append(line)

with open('output.txt', 'w', encoding='utf-8') as f:
    f.writelines(unique_lines)

Method 5: Modern JavaScript

In web applications or Node.js scripts, leverage ES6 Set collections:

const input = "apple\nbanana\napple\norange";
const uniqueText = Array.from(new Set(input.split(/\r?\n/))).join('\n');
console.log(uniqueText); // "apple\nbanana\norange"

Handling Case Sensitivity and Whitespace

Default deduplication logic treats "ERROR" and "error" as distinct lines. If case-insensitive filtering is needed, transform keys to lowercase during evaluation while preserving the original string casing in output structures. Similarly, apply trim() routines if trailing spaces or carriage returns should be normalized.