文本排序:按字母、长度、数字排序与去重
把文本一行一条粘进去,选一种排序方式(字母/字符序、长度、行内数字大小),需要时勾上降序或去重,点「排序」即可。全部在浏览器本地完成,文本不会上传。
什么时候真的需要排序
最常见的是清单整理:关键词、域名、姓名、标签一行一条,先按字母排好再贴进表格或文档,比在表格里反复点排序快。
第二类是把编号看成人能读的顺序。日志或文件名里常有 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 时,页面会明显变慢,因为所有行都要留在内存里。
- 需要固定顺序或按列排:命令行 sort 或表格软件
- 需要严格拼音、笔画、部首:用带词典的专业排序工具
- 抽奖、随机分组:别用 Math.random,用可验证的随机源
常见问题
中文是按拼音排序吗?
大致是,但不保证。工具把比较交给浏览器的 localeCompare('zh-Hans-CN'),各浏览器依赖自己的 ICU 数据,实测汉字接近拼音序,但多音字、生僻字和不同浏览器版本可能给出不同结果。要固定顺序,用 LC_ALL=C sort 按字节排,或在脚本里按 Unicode 码位比较。
为什么 file2 排在 file10 前面?
字母/字符序模式带了 numeric 选项,连续数字按数值比较,所以 file2 小于 file10。纯字符比较会得到相反结果,因为字符 1 小于 2。想两种顺序一致,把编号补零成 file02、file10。
勾了去重,为什么 Apple 和 apple 都还在?
去重用的是 Set 的精确比较,区分大小写,也不去首尾空白;而排序比较忽略大小写,所以两行都留下,只是相邻显示。前面有空格的行也会被当成另一条。要忽略大小写去重,先用文本去重工具勾上对应选项,再回来排序。
相关工具:文本排序