← 返回博客

如何删除文本中的重复行

2026-04-05 · 5 分钟阅读

何时需要删除重复行

重复行问题在数据处理中非常普遍。常见场景:合并多个来源的关键词列表时产生的重复词条;从数据库导出的重复记录;多人协作的文档中重复添加的条目;爬虫或数据抓取结果中的重复 URL 或内容;合并多份配置文件时出现的重复条目。

在线工具去重

最快的方法是使用在线文本去重工具。将包含重复行的文本粘贴到输入框,工具会保留每行的第一次出现并删除后续重复,输出去重后的结果。可以选择是否区分大小写(Apple 和 apple 是否视为重复)以及是否删除空白行。

命令行工具(Unix/Linux/macOS)

# sort + uniq 组合:先排序再去重(相邻重复行才能被 uniq 识别)
sort input.txt | uniq > output.txt

# 仅删除连续重复行(不排序)
uniq input.txt > output.txt

# 统计每行出现次数
sort input.txt | uniq -c

# 只保留出现超过一次的行
sort input.txt | uniq -d

# 只保留只出现一次的行(唯一行)
sort input.txt | uniq -u

Python 代码实现

# 保留顺序的去重(使用 dict 或 set)
def remove_duplicates(text):
    lines = text.splitlines()
    seen = {}
    result = []
    for line in lines:
        key = line.strip().lower()  # 忽略大小写和前后空格
        if key not in seen:
            seen[key] = True
            result.append(line)
    return '\n'.join(result)

# 注意:使用 set() 去重不保证顺序
# unique_lines = list(set(lines))  # 不推荐用于需要保留顺序的情况

保留顺序 vs 不保留顺序

去重时有两个策略:保留顺序(保留每行第一次出现,删除后续重复)和不保留顺序(用 set 去重后随机顺序输出)。对于大多数列表整理场景,保留原始行顺序(删除后续重复而非先出现的)更符合预期。sort + uniq 组合会先排序后去重,结果是排序后的无重复列表,与原始顺序不同。

近似重复行的处理

精确重复行很好处理,但"近似重复"(如仅有空格数量差异、大小写不同、前后有空白字符)需要在比较前先标准化。标准化步骤:去除首尾空白(trim)、统一大小写(全转小写或全转大写)、压缩连续空格为单个空格。执行这些标准化后再比较,可以捕获更多实际重复的行。

大文件处理的性能考量

对于包含数百万行的大型文件,在线工具可能会遇到浏览器内存限制。这种情况推荐使用命令行工具:sort -u input.txt > output.txt 可以高效处理非常大的文件,因为 sort 工具支持外部排序(临时文件),不需要将全部数据加载到内存中。

Excel 和 Google Sheets 中的去重

如果数据在电子表格中,Excel 的"删除重复项"功能(数据选项卡)可以按列去重。Google Sheets 可以使用 =UNIQUE(A1:A100) 公式返回去重后的列表。这对于电子表格数据的去重比导出再处理更方便。

立即免费使用相关工具

免费使用 →