这个工具做什么

一行一条数据, 去掉重复的行, 并单独列出被重复的内容. "原数据 N 条 / 去重之后 M 条"直接给出数量差, 适合快速统计一批 ID, 手机号, 行政区划码里到底重复了什么.

输入:              输出(去重结果, 3 条):
1001               1001
1002               1002
1001               1003
1003
                   重复数据(1 条):
                   1001

怎么用

  1. 从 Excel, 日志或查询结果里复制一列, 直接粘进输入框 -- 粘贴即出结果, 也可以点"去重";
  2. 看下方三个区块: 去重后的列表, 计数, 重复项列表;
  3. 点"复制去重后结果"拿到干净的行列表, 可以直接粘回 Excel 或 SQL 的 IN (...).

比对规则

下面几条是按接口实际行为验证过的, 理解它们能避免"条数对不上"的困惑:

  • 保留首次出现的顺序, 不是字典序;
  • 每行的前后空格会被去掉后再比对: " b " 和 "b" 算重复, 输出的是去掉空白的 b;
  • 大小写敏感: A 和 a 是两条不同数据;
  • 空行和纯空格行会被忽略, 不会出现在结果里;
  • 但"原数据 N 条"把空行也算进去 -- 末尾那个回车会让 N 比你的直觉多 1, 这是最常见的对不上原因.

什么情况会用到

  • Excel 里一列单号要看有没有重复, 重复了哪几个;
  • 拼 IN (...) 之前先去掉重复值, 减少参数个数;
  • 两个版本的数据各导出一列, 比对"多的那批是不是本来就重复";
  • 核对推送名单, 短信号码这类要去重的清单.

常见问题

为什么结果条数和我数的不一样?

先看"原数据 N 条"是不是比你粘贴的行数多 1 -- 那是末尾换行产生的空行. 若差异更大, 多半是空白行或行内空格: 中间的空格不会被去掉("1 001" 与 "1001" 视为不同), 只有首尾空格会被忽略.

能按某个分隔符去重(比如整行是 CSV)吗?

不能, 这里只按整行文本比对. 要在 CSV 的某一列上去重, 先把那一列单独取出来(Excel 分列, awk -F, '{print $2}' file | sort -u), 再粘进来.

数据量很大也能用吗?

去重在服务端完成, 几行到几万行都能跑, 但要注意两点: 一是这个页面是"输入即请求", 边打字会边发请求, 大数据量建议一次粘完而不是手打; 二是浏览器渲染几万行结果本身会比较慢. 真正的海量去重还是该用 SQL 的 SELECT DISTINCT col 或 GROUP BY col, 或者终端 sort -u.

和 SQL 里的 DISTINCT 有什么区别?

思路一致但作用域不同: DISTINCT 是对查询结果的整行去重, 且由数据库优化器处理; 本工具是纯文本行去重, 还会额外把重复项列出来 -- 这一点比 DISTINCT 方便, SQL 里要查出"哪些值重复了"得额外写 GROUP BY ... HAVING COUNT(*)>1.

数据会被上传吗?

会, 去重在服务端接口完成, 你粘贴的内容作为请求参数发送过去, 只用于这一次处理, 页面没有账号体系, 也不会把结果展示给其他访问者. 身份证, 手机号, 银行卡号等敏感名单请先脱敏.

相关工具