悦省yueser.com

← 全部指南

文本按行去重并保留原顺序:不排序、只留第一次出现

把文本按行粘进来,点「去重」,重复的行只保留第一次出现的那条,其余顺序完全不变。勾选「忽略大小写」或「忽略首尾空白」可以放宽比较条件,空行会被自动丢弃。

打开工具:文本去重

什么时候需要按行去重

几份渠道导出的邮件名单、关键词表或 URL 清单拼在一起,同一行会反复出现。这时候需要的是保留第一次出现的顺序,而不是排序后再去重——顺序本身往往代表优先级。

日志行、问卷开放题、客服工单标题、SKU 清单也是同样的场景。人工比对几百行不现实,而排序会打乱你原本想保留的先后关系。

口径和勾选项的实际效果

比较以整行为单位,做的是精确匹配,不做模糊匹配,也不会把同义词合并。勾选「忽略大小写」时,先出现的那种写法会被保留;勾选「忽略首尾空白」时,比较和输出都用去掉首尾空白后的版本,行首行尾的空格和 Tab 会被删掉。

空行一律丢弃,只含空格的行在不勾选 trim 时会保留。结果只告诉你保留了多少行、去掉多少行重复,不输出每行重复了几次、出现在哪些位置。

替代方案和它的局限

如果还需要知道重复次数,用 sort | uniq -c,或在表格软件里用数据透视表计数;需要模糊匹配、去掉近似重复(比如带 utm 参数的同一 URL),要先用正则或脚本归一化再比较。

代码和 Markdown 不适合整行去重:重复的 import、重复的分隔线、重复的空行都有语法意义,删掉会破坏文件。几十万行文本在浏览器里滚动和选中都会变卡,这是文本框渲染的限制,不是去重算法本身。

常见问题

去重会打乱行的顺序吗?

不会。处理时从第一行走到最后一行,第一次出现的行留在原来的位置,之后相同的行被丢弃,所以输出的顺序和你粘贴的顺序一致。这和「先排序再去重」不同,后者会改变顺序,适合只关心有哪些值、不关心先后的场景。

怎么去掉重复项但保留重复次数?

这个工具只输出去重后的文本,不统计次数。需要计数时,用命令行的 sort | uniq -c,或在 Excel、Google Sheets 里用数据透视表按列计数。也可以先排序让重复行相邻,再用条件格式标出重复项人工确认。

为什么去重后少了很多行?

最常见的原因是空行被丢弃:工具会跳过所有空行,只含空格的行在不勾选「忽略首尾空白」时才会保留。其次是勾选了「忽略大小写」,只有大小写不同的行被当成了重复。可以取消勾选再跑一次,对比保留行数。

相关工具:文本去重