文本工具

按行排序与去重

粘贴每行一项的列表,就能排序、打乱或清理。中文按拼音排序,自然顺序会把 第2章 排在 第10章 前面。

全部在你的浏览器里运行,这里输入的内容不会上传。

怎么用

  1. 粘贴列表,每行一项:姓名、邮箱、商品编码、文件名、关键词都可以。
  2. 选择排序方式和重复行的处理方式。「去掉首尾空格」和「删除空行」默认开启,因为从别处复制来的列表常常带着这两样东西。
  3. 点执行,结果显示在右边,并给出保留和删除的行数;之后再改选项,会立即重新计算。
  4. 复制结果,或者点把结果作为输入再处理一遍。

排序的规则

中文按拼音排

如果直接按字符编码排序,中文的顺序是 Unicode 里汉字的编码顺序,和读音毫无关系;英文的所有大写字母会排在所有小写字母前面,带重音的字母会被甩到最后。本工具用浏览器的 Intl.Collator 比较每一行,它实现了 Unicode 排序算法,并遵循页面语言的习惯:中文按拼音排序,也就是《现代汉语词典》等大多数现代辞书使用的顺序;英文先比字母,再比重音,最后比大小写。所以「李四」会排在「王五」前面,「王五」排在「张三」前面。

多音字按最常用的读音排,同音字之间的先后由排序规则内部决定,和词典里的顺序不一定完全一致。姓氏里的多音字(比如单、曾)可能需要手动调整。

自然顺序

普通的字母顺序把数字当作字符一位一位比较,所以 file10 会排在 file2 前面,因为 1 小于 2。自然顺序会把连续的数字当作一个数来比较,得到 file1、file2、file10,这才是人们对编号文件、章节、版本号期望的顺序。「第2章」「第10章」这样的中文标题同样适用。

去重

去重时保留第一次出现的那一行,所以在不排序的情况下,剩下的行仍然保持原来的先后顺序。「不区分英文大小写」会把 Apple 和 apple 当作同一行,保留先出现的那个。去重在去掉首尾空格之后进行,所以勾选了去空格时,「苹果」和「苹果 」(末尾多一个空格)也会被识别为重复。

随机打乱

打乱使用 Fisher–Yates 算法,随机数来自浏览器的密码学随机数生成器,每一种排列出现的概率完全相同。它和「随机抽签」工具用的是同一套方法,那个工具还能抽人和分组。

示例

输入(每行一项)设置结果
张三、李四、王五升序李四、王五、张三
file10、file2、file1升序file1、file10、file2
file10、file2、file1自然顺序file1、file2、file10
ccc、a、bb按长度a、bb、ccc
Apple、apple、Banana、apple删除(不区分大小写)Apple、Banana(删除 2 行)
Apple、apple、Apple删除完全相同的行Apple、apple(删除 1 行)

整理报名名单:把两个渠道导出的名单粘在一起,选「升序」和「删除完全相同的行」,重复报名的人就只剩一条,名单也按拼音排好了。

整理关键词:从几个文档里收集来的关键词,去掉首尾空格、删掉空行和重复项之后,再按长度排序,很容易看出哪些是长尾词。

局限

  • 每行一项。 同一行里用逗号或制表符分隔的多个值会被当作一项;处理表格请用 CSV 相关工具。
  • 相似不等于相同。 「北京市」和「北京」、同一个人名的两种写法,都算不同的行;只有完全相同的行(可选择不区分英文大小写)才会被删除。
  • 多音字与混合文字。 多音字的读音、中英文混排时不同文字之间的先后,按 Unicode 默认规则处理,不一定是你想要的顺序。
  • 带千分位的数字。 自然顺序会把 1,000 读成 1 和 000 两个数。需要按数值排序时,请先去掉千分位逗号。

常见问题

怎么删除重复行?

粘贴列表后,选「删除完全相同的行」;如果 Apple 和 apple 应该算同一项,就选「不区分英文大小写」。每一行保留第一次出现的那个。

中文能按拼音排序吗?

能。在中文页面上,中文行按拼音顺序排列。

为什么 file10 排在 file2 前面?

字母顺序是一位一位比较的,1 小于 2。选「自然顺序」就会按数字大小比较。

随机打乱公平吗?

公平。它使用 Fisher–Yates 洗牌算法和密码学安全的随机数,每一种顺序出现的概率都相同。

我的列表会被上传吗?

不会。排序和去重都在你的浏览器里完成。

参考资料

↵ 打开 · Esc 关闭