文本按行去重并保留原顺序:不排序、只留第一次出现
把文本按行粘进来,点「去重」,重复的行只保留第一次出现的那条,其余顺序完全不变。勾选「忽略大小写」或「忽略首尾空白」可以放宽比较条件,空行会被自动丢弃。
什么时候需要按行去重
几份渠道导出的邮件名单、关键词表或 URL 清单拼在一起,同一行会反复出现。这时候需要的是保留第一次出现的顺序,而不是排序后再去重——顺序本身往往代表优先级。
日志行、问卷开放题、客服工单标题、SKU 清单也是同样的场景。人工比对几百行不现实,而排序会打乱你原本想保留的先后关系。
- 合并多个 CSV 的同一列,去掉重复的 SKU 或 URL
- 整理投放渠道、关键词、邮件地址清单
- 清理日志或抓取结果里的重复行
- 汇总问卷开放题,先看有哪些不同回答
口径和勾选项的实际效果
比较以整行为单位,做的是精确匹配,不做模糊匹配,也不会把同义词合并。勾选「忽略大小写」时,先出现的那种写法会被保留;勾选「忽略首尾空白」时,比较和输出都用去掉首尾空白后的版本,行首行尾的空格和 Tab 会被删掉。
空行一律丢弃,只含空格的行在不勾选 trim 时会保留。结果只告诉你保留了多少行、去掉多少行重复,不输出每行重复了几次、出现在哪些位置。
- 需要保留原始缩进时,不要勾「忽略首尾空白」
- 大小写混用的名单,先想要保留哪种写法再勾选
- 需要重复次数或位置:换用排序计数或脚本
- 几十万行请分段处理,瓶颈在粘贴和文本框渲染
替代方案和它的局限
如果还需要知道重复次数,用 sort | uniq -c,或在表格软件里用数据透视表计数;需要模糊匹配、去掉近似重复(比如带 utm 参数的同一 URL),要先用正则或脚本归一化再比较。
代码和 Markdown 不适合整行去重:重复的 import、重复的分隔线、重复的空行都有语法意义,删掉会破坏文件。几十万行文本在浏览器里滚动和选中都会变卡,这是文本框渲染的限制,不是去重算法本身。
- 要计数:sort | uniq -c 或数据透视表
- 要模糊归并:先归一化 URL、大小写、空白,再去重
- 代码和 Markdown:不要整行去重,用 linter 或格式化工具
常见问题
去重会打乱行的顺序吗?
不会。处理时从第一行走到最后一行,第一次出现的行留在原来的位置,之后相同的行被丢弃,所以输出的顺序和你粘贴的顺序一致。这和「先排序再去重」不同,后者会改变顺序,适合只关心有哪些值、不关心先后的场景。
怎么去掉重复项但保留重复次数?
这个工具只输出去重后的文本,不统计次数。需要计数时,用命令行的 sort | uniq -c,或在 Excel、Google Sheets 里用数据透视表按列计数。也可以先排序让重复行相邻,再用条件格式标出重复项人工确认。
为什么去重后少了很多行?
最常见的原因是空行被丢弃:工具会跳过所有空行,只含空格的行在不勾选「忽略首尾空白」时才会保留。其次是勾选了「忽略大小写」,只有大小写不同的行被当成了重复。可以取消勾选再跑一次,对比保留行数。
相关工具:文本去重