悦省yueser.com

← 全部指南

文本排序:按字母、长度、数字排序与去重

把文本一行一条粘进去,选一种排序方式(字母/字符序、长度、行内数字大小),需要时勾上降序或去重,点「排序」即可。全部在浏览器本地完成,文本不会上传。

打开工具:文本排序

什么时候真的需要排序

最常见的是清单整理:关键词、域名、姓名、标签一行一条,先按字母排好再贴进表格或文档,比在表格里反复点排序快。

第二类是把编号看成人能读的顺序。日志或文件名里常有 file2、file10,纯字符比较会把 file10 排在 file2 前面,按数字大小比较才符合直觉。

合并几份名单后,通常还要去重并按长度排一遍:短词在前的标签列表、词云、下拉选项都好用。

怎么做才不出错

先确认输入是「一行一条」。这个工具按整行比较,不解析逗号或制表符分隔的列;要按 CSV 的某一列排序,得先拆列或用表格软件。空行会被直接丢掉,不会保留空位。

字母/字符序模式对连续数字做了自然排序(numeric),所以 file2 在 file10 之前;如果你要严格的字符顺序,这点反而会「不符合预期」,把编号补零成 file02 就两种顺序都一致了。

去重是精确匹配:区分大小写,也不去首尾空格。所以 Apple 和 apple 会同时留下,只是排在一起;带前导空格的「 apple」也算另一条。想忽略大小写去重,先用文本去重工具处理,再回来排序。

随机打乱用 Math.random,不适合抽奖、分组这类需要公平随机的场景。它没有可验证的随机源,也无法复现,要公平抽奖请用带种子的随机或专门的抽签工具。

中文顺序不是本工具自己算的,而是交给浏览器的 localeCompare('zh-Hans-CN')。Chrome、Safari、Firefox 各带自己的排序数据,实测汉字大致按拼音走(阿 < 波 < 李 < 钱 < 王),但多音字、生僻字和不同版本之间可能不一致。要做人名册、术语表这种必须固定的顺序,别依赖浏览器。

替代方案与局限

命令行 sort 更可控:LC_ALL=C sort 按字节序,结果在任何机器上都一样;sort -t, -k2 能按 CSV 的列排;sort -u 去重;sort -R 随机。几百 MB 的文件也吃得下。

电子表格适合已经结构化的数据:按列排序、去重、筛选都有界面,还能保留其他列。代价是要先把数据搬进表格。

本工具只按整行处理,不解析结构,也不能按拼音/笔画严格排序;随机模式不适合公平场景。文本量大到几 MB 时,页面会明显变慢,因为所有行都要留在内存里。

常见问题

中文是按拼音排序吗?

大致是,但不保证。工具把比较交给浏览器的 localeCompare('zh-Hans-CN'),各浏览器依赖自己的 ICU 数据,实测汉字接近拼音序,但多音字、生僻字和不同浏览器版本可能给出不同结果。要固定顺序,用 LC_ALL=C sort 按字节排,或在脚本里按 Unicode 码位比较。

为什么 file2 排在 file10 前面?

字母/字符序模式带了 numeric 选项,连续数字按数值比较,所以 file2 小于 file10。纯字符比较会得到相反结果,因为字符 1 小于 2。想两种顺序一致,把编号补零成 file02、file10。

勾了去重,为什么 Apple 和 apple 都还在?

去重用的是 Set 的精确比较,区分大小写,也不去首尾空白;而排序比较忽略大小写,所以两行都留下,只是相邻显示。前面有空格的行也会被当成另一条。要忽略大小写去重,先用文本去重工具勾上对应选项,再回来排序。

相关工具:文本排序