文本处理
一份多行文本,勾几个选项就完成去重、排序、去空行、大小写转换和加行号——选项可以叠加。
输入(一行一条,逗号分隔的清单建议先替换成换行)
输出
选项怎么组合:固定顺序
选项按下面这条固定流水线依次执行,与勾选先后无关,所以同样的输入加同样的勾选一定得到同样的结果。这里最需要注意的是:去重排在大小写转换之前,所以要把 abc 和 ABC 合成一条,得同时勾「去重时忽略大小写」和转大写。
- 去行号:先剥掉已有的
12.、12)、12、或(12)前缀,避免后面按内容排序时被行号带着走。点号后面紧跟数字的不算行号,所以2024.05.01和3.14会被原样保留。 - 去首尾空格:去掉每行两端的空格、Tab 和全角空格。它同时是去重和排序的比较基准。
- 去空行:删掉空字符串行。注意这一步在去首尾空格之后,所以「只有空格」的行也会被删掉。
- 去重:保留最先出现的一行;勾了忽略大小写就按小写比较。
- 排序:按 Unicode 码位升序或降序。
- 大小写转换:全大写 / 全小写 / 首字母大写。
- 加行号:按当前结果的行数补零对齐编号。
- 反转行序:最后一步,把整份结果倒过来。
需要注意的是去行号、去首尾空格、反转行序在没有其它选项时也会独立生效,可以单独当小工具用;而不勾任何选项时,输出就是原样输入。
去重的两个细节:大小写与首尾空格
绝大多数「去重没去干净」都是这两个开关没勾。默认只把逐字符完全相同的行算重复:abc 和 Abc 是两行,abc 和 abc (末尾一个空格)也是两行。从 CSV、Excel 或日志里粘出来的清单几乎一定混着这两种情况,所以建议先勾「去除首尾空格」,再按需要决定要不要勾「去重时忽略大小写」。另外,忽略大小写只影响比较过程,不会改写输出内容——想统一成一种写法,还要勾一个大小写转换。
常见的坑
- 排序把大小写打乱了。按码位排序时大写字母(A–Z,码位 65–90)整体排在小写字母(97–122)前面,
Banana会排在apple前。想要不区分大小写的顺序,先统一大小写再排序。 - 中文排序不是拼音序。这一页按 Unicode 码位排,中文既不是拼音也不是笔画序。要拼音排序请用表格软件的自定义排序。
- 加行号后别再排序。行号必须在所有排序和去重之后加,否则编号会被跟着内容一起搬走。这里已经把它放在流水线末尾,所以顺序是安全的。
- 数字是当文本排的。
10会排在9前面,因为比较的是字符而不是数值。需要数值排序时先把数字补成等宽(09、10)。
常见问题
为什么去重后还是留下了我以为是重复的行?
默认去重区分大小写、也不忽略首尾空格。粘来的数据里往往混着开头空格和末尾空格,看起来一样其实字节不同。勾上「去除首尾空格」,必要时再勾「忽略大小写」。
多个选项的生效顺序是什么?
去行号 → 去首尾空格 → 去空行 → 去重 → 排序 → 大小写转换 → 加行号 → 反转行序。顺序固定,与勾选先后无关,所以结果可以复现。
排序是按拼音还是按字母?
按 Unicode 码位,也就是大小写敏感的字典序,大写排在小写之前。没有拼音排序,中文按码位排列。
去重时保留哪一行?
保留最先出现的那一行,并且输出的也是去掉首尾空格之后的内容。想反过来保留最后一行,可以先勾「反转行序」,处理完再反转一次。
处理大批量文本会不会卡?
去重和排序都是单次线性或 n log n 遍历,十万行级别在毫秒到几十毫秒之间。为防误操作,单次超过十万行或 5MB 会直接提示而不处理。