列表对比

查找交集和两侧独有项目

正在加载工具…

关于 列表对比工具

列表比较工具把粘贴进来的两份列表当作「按行构成的集合」,输出三份结果:只在 A 中的条目、两边都有的条目、只在 B 中的条目。每个结果面板都带独立计数和复制按钮,拿到就能直接用于下一步。

列表比较的价值,完全取决于比较之前做了怎样的归一化。同一批数据的两份导出,几乎不会在行尾空格、大小写、重复行算不算数这些事上达成一致。面板上方那四个复选框决定了全部规则。先把问题说清楚——「哪些账号在预发有、在生产没有」——再设置能让它可被回答的选项。

如何使用这个开发者工具

  1. 把一份列表粘贴到面板 A,另一份粘贴到面板 B,每行一个条目。
  2. 有意识地设置四个选项。默认「忽略首尾空白」和「忽略空行」是开的,「忽略大小写」是关的,「去重」是开的。
  3. 执行比较,读三个结果面板:仅 A、交集、仅 B,条目数就写在各自面板标题上。
  4. 如果某个计数出乎意料,一次只改一个选项再跑一遍。两次结果之差,正好告诉你是哪条归一化规则在起作用。
  5. 复制需要的那一份。三份输出都是换行分隔的纯列表,可以直接粘回查询语句、工单或别的工具里。

实例:两套环境的功能开关

列表 A 是预发环境的开关集合,从控制台复制出来,有几行带缩进,还重复了一项。列表 B 是生产环境,导出时用的是 Windows 换行。四个选项保持默认:忽略首尾空白开、忽略大小写关、忽略空行开、去重开。

列表 A(预发)与列表 B(生产)
A:
checkout_v2
dark_mode
  legacy_banner
search_rerank
Dark_Mode
checkout_v2

B:
checkout_v2
dark_mode
search_rerank
promo_bar
结果
仅 A · 2
legacy_banner
Dark_Mode

交集 · 3
checkout_v2
dark_mode
search_rerank

仅 B · 1
promo_bar

三条默认规则在这里都真的干了活。去首尾空白把「 legacy_banner」变成了可比较的值;去重把重复的 checkout_v2 收成一条;而 B 里的 Windows 换行,行切分器本来就吃得下,不需要任何选项。Dark_Mode 落在「仅 A」里,是因为忽略大小写是关的——对开关键名这是对的,换成邮箱地址就是错的。

为什么两个看起来一样的条目匹配不上

行切分同时支持 CRLF、CR 和 LF,混合换行永远不会造成误判。其余所有「看起来相同、比较起来不等」的原因都列在下面。

隐藏差异去首尾空白能消除吗怎么处理
行首或行尾空格能保持该选项开启
不换行空格 U+00A0,来自网页表格或 PDF仅首尾能夹在中间的要先替换掉
表意空格 U+3000,来自中日文文档仅首尾能同上
字节序标记 U+FEFF,来自 Excel 导出能治本是导出时不写 BOM
零宽空格 U+200B不能去空白不把它当空白,需先删除
大小写,Dark_Mode 与 dark_mode不能上游不区分大小写时才打开忽略大小写
Unicode NFC 与 NFD,例如 café不能比较前把两份导出归一化为 NFC
行上残留的引号或逗号不能先在文本工作台去掉外壳

常见问题排查

两份列表明显有重合,交集却是空的。

成因 其中一份是从查询结果或表格里复制的,还带着原有格式:外层引号、行尾逗号、行首项目符号或列分隔符。每一行都因为这些字符而不同,于是一个都对不上。

解决办法 比较前先剥掉这层外壳。文本工作台可以一次性去掉每行的字面前缀和后缀,清理完再粘回这里。

三个计数加起来对不上两份输入的行数。

成因 默认开启了去重,所以列表内重复的值只算一次;空行也在比较前被丢掉了。

解决办法 对「是否存在」类问题,这通常正是你要的。当你想确认某份列表里到底有没有重复时,把去重关掉,再拿交集计数和原始行数对照。

明明两边都有的条目,却被判为「仅 A」。

成因 默认区分大小写,而且值内部的每个字符都算数。Dark_Mode 和 dark_mode 是两个条目,api.example.com 和 API.example.com 也是。

解决办法 上游不区分大小写时才打开忽略大小写,例如邮箱本地部分、主机名、Windows 路径。区分大小写的场景一律保持关闭:S3 对象键、Linux 路径、Base64 值,以及大多数标识符。

结果说两份列表相同,但你明明知道其中一份被重新排过序。

成因 这是集合比较。它只报告成员关系,位置和顺序在比较之前就被丢弃了。

解决办法 顺序有含义时请改用文本比较工具,比如路由表、迁移脚本序列,或者行号本身有意义的 CSV。

适合用这个工具的场景

  • 找出哪些标识符只存在于某一个环境、租户或导出文件中。
  • 迁移前把待发布清单和资产清单对一遍,不用写查询。
  • 把预期的文件、开关或权限清单,与系统实际报告的内容做核对。
  • 给单份列表去重:粘进 A,B 留空,「仅 A」面板就是去重后的集合。

应该换用别的工具的场景

  • 比较同一份有序文档的两个版本。文本比较工具会保留位置,并显示什么被移动了。
  • 比较每行含多个字段的记录。把数据丢进 JSON 转表格工具,或者只比较你真正用作键的那个字段,而不是整行。
  • 统计每个值出现了多少次。这里的结果是集合而非计数,分组查询或表格透视才是正解。

隐私与数据处理

两份列表的切分、归一化和求交都在当前浏览器标签页完成,不上传,刷新即消失。这里比较的通常是导出数据——用户 ID、邮箱、订单号——恰恰是不该不假思索地粘进公开工具的那类内容。建议比较有代表性的切片,而不是完整导出。

相关开发者工具

常见问题

工具在意 Windows 换行吗?

不在意。任何处理之前,行都会按 CRLF、CR 或 LF 切分,所以一边粘 Windows 导出的文件、另一边粘 Unix 的,不用改任何选项。换行符对做差异比较是个真问题,但在这里不是。

怎么给单份列表去重?

粘进面板 A,面板 B 留空,保持去重开启,然后执行比较。所有内容都会落在「仅 A」面板里,重复项已合并、空行已去掉,面板标题上的数字就是去重后的条目数。

为什么忽略大小写默认是关的?

开发者要比较的东西大多区分大小写:对象键、Linux 路径、令牌、Git 引用、开关名。悄悄转成小写会把真实系统视为不同的条目合并掉。把它打开,应该是一次明确的判断:上游系统确实不区分大小写。

去重只影响计数,还是也影响出现的条目?

两者都影响。开启去重时,每个不同的值只在它所属的面板里出现一次。关闭后,「仅 A」和交集会按值在列表 A 中出现的次数重复,「仅 B」对列表 B 同理。

能一次比较三份以上的列表吗?

一次不行。先比较 A 和 B,复制交集,再拿它去和第三份比较。对成员关系类问题这样串联是正确的,因为求交满足结合律。

计数没问题,但结果的顺序看起来很随意,为什么?

结果面板保留来源列表的顺序:「仅 A」和交集跟随列表 A,「仅 B」跟随列表 B。这里不做任何排序,便于你认出原来的分组。需要按字母序时,把输出丢进文本工作台排序即可。