按行去重排序
去除空行、重复行,可选按字母顺序排序
按行去重与排序:精确匹配的边界和常见意外
去重是"精确匹配",不是"看起来一样"
判断两行是否重复,工具做的是逐字符比较。所以下面这些"看起来重复"的情况不会被去掉:
| 两行的实际内容 | 是否判为重复 | 原因 |
|---|---|---|
apple 与 apple (末尾空格) | 否 | 行尾空白是内容的一部分 |
apple 与 Apple | 否 | 大小写敏感 |
café 与 café(组合音标) | 否 | Unicode 码点序列不同,渲染结果却一样 |
a b 与 a b(两个空格) | 否 | 空白字符数量不同 |
所以"去重没生效"的最常见原因是行尾空白或不可见字符。从网页或 PDF 复制来的文本尤其容易带这类字符。处理顺序建议是:先去空行和首尾空白 → 再去重。工具提供"去空行"开关,也会在判重时按行内容精确比较。
另外注意:含有换行的字段本身不是"一行"。从 CSV 复制数据时,如果某个字段内部有换行(未加引号处理的情况),它会被拆成多行,去重逻辑就在错误的粒度上工作了。
保留哪一条
遇到重复行时,工具保留首次出现的,丢弃后面的。所以如果重复行的上下文中承载了位置信息,去重后的结果会失去它。
需要"保留最后一条"或"按某规则选一条"时,按行去重就不够了——那属于数据去重,应该按关键字段分组后取一条,用 SQL 的 DISTINCT ON、row_number(),或者脚本里处理。
排序的两种口径
工具可选按字母顺序排序,这里同样有细节:
- 码位排序(默认的字符串比较)。按字符的 Unicode 值排,结果是所有大写字母排在小写字母之前:
Z在a前面。 - 不区分大小写排序。字母混排更符合人的直觉,但结果依赖语言规则(例如德语
ö与o的关系、瑞典语把å排在z之后)。 - 数字排序。字符串比较下
10排在2前面(因为首字符1<2)。要自然序(2在10前面)需要按数值比较。
看到"排序结果不对"时,先判断属于哪一种。列表去重加排序这个组合最常见的用途是整理关键词、域名、邮箱、IP、导入白名单——这类数据里的"重复"往往是格式差异(一个带 www 一个不带,一个尾斜杠一个有),需要在去重前先做规范化,否则去不干净。
去重的实际用途
- 合并多个数据源。把几份导出的名单拼在一起后去重。
- 清理抓取结果。爬虫结果里同一个链接出现多次。
- 核对差异。两份名单都去重排序后,用文本对比工具找差异,比手工核对可靠得多。这两步连用是很实用的组合。
- 压缩配置文件。多个环境变量文件合并时去掉重复项(但要先确认同名不同值的项——那属于冲突,不该静默去重)。
最后一条值得强调:去重会隐藏冲突。同名不同值的两行不是"重复",去重后你会丢掉其中一个,而且不知道丢了哪个。处理配置合并时,应该先找出同名不同值的项并人工确认,再去做纯粹的重复消除。
工具怎么用
粘贴每行一条的文本,按需要勾选"去空行"、"去重"、"排序",点处理,再用复制按钮取走结果。三个开关可以自由组合——例如只想去掉空行而保留重复项,就取消"去重"。全部处理在浏览器本地完成。
常见问题
排序是按什么规则?
使用 JS 默认字符串排序,按 Unicode 码点比较,区分大小写。需要中文拼音排序可先用其他工具处理。
去重是保留第一次还是最后一次出现?
保留第一次出现的位置,后续重复行被移除。