按行、按分隔符、按字符有什么区别

工具相关 ·

打开一个去重工具,第一件要选的事是「去重单位」。选错了,结果会完全不符合预期——想按行去重,得到的却是一堆单个字符。这三种单位的差别不只是粒度不同,它们处理的其实是三类不同形态的数据。

三种单位分别比较什么

假设输入是这一行:

苹果,香蕉,苹果,樱桃

三种单位的处理方式和结果如下。

单位比较对象结果
按行整行内容保留这 1 行,因为只有一行
按分隔符拆分后的每一项苹果、香蕉、樱桃(每项一行)
按字符单个字符苹果香蕉樱桃(重复字符只留一个)

这个对比清楚地说明了三者的差异。按行看的是「这一行和别的行是否相同」;按分隔符看的是「这一行内部的各项是否重复」;按字符看的是「单个字符是否重复」。

按行:最常用的场景

按行去重对应的是「列表型数据」。这类数据的特征是:一行就是一条记录。

从 Excel 或数据库导出的名单、日志文件的每一行、标签列表、域名列表、邮箱列表,都属于这一类。

处理这类数据时,按行是唯一正确的选择。需要注意的是行内可能含有分隔符(比如一条记录里有个逗号),此时按分隔符处理会破坏记录结构,把一条记录拆成几条。

按行去重的一个细节是:首尾空白会影响判断。如果一行是 苹果,另一行是 苹果 (末尾多个空格),按行比较时它们不同。这时需要勾选「忽略首尾空白」。

按分隔符:处理行内列表

按分隔符对应的是「一行内包含多项」的数据。

最典型的是从某个表单或表格里复制出来的一串关键词,用逗号或空格分隔:SEO, 优化, 关键词, SEO, 排名。这时需要的是把每一项拆开,再去掉重复的项。

分隔符可以指定,常见的有逗号、分号、制表符、空格。选择时要与实际数据一致,否则拆分会失败——比如数据用逗号分隔,却选了制表符,那么整行会被当成一项。

处理之后的结果通常是每项占一行。这是因为输出需要保持结构清晰,而多项挤在一行里不利于后续处理。如果最终需要一行输出,可以在去重后手动合并。

按字符:清理杂乱的字符集合

按字符去重是最少用的,但也有它的场景。

它的行为是把文本拆成单个字符,去掉重复的,然后拼接。所以 aabbcc 会变成 abc,苹果苹果 会变成 苹果。

需要注意的是,按字符去重会丢弃空白字符。这意味着输入里的空格、换行都不会保留在输出里。对于一段用空格分隔的文本,按字符去重的结果会变成所有字符连在一起。

它的适用场景很窄:清理一段字符组成已知但重复的字符串,比如校验某个字符串里是否包含重复字符、或者把一段乱序的字符集合规整化。

一个常见的误操作

最容易出现的错误是:数据其实是「一行一条记录」,但选成了「按字符」。

这时输出会变成一堆散乱的单个字符,看起来像乱码。遇到这种情况,第一反应不应该是「工具坏了」,而是检查去重单位是否选对。

另一个常见的误操作是把「按行」用在「一行内含多项」的数据上。这种情况下,因为整行是唯一的,去重结果是原样输出,看起来像「没起作用」。

判断方法很简单:先看一眼输入数据的形态。如果每行是一条完整记录,选按行;如果一行里有多个用符号隔开的项,选按分隔符。

检查清单

  • 按行比较整行,适合列表型数据,一行一条记录
  • 按分隔符先拆分再比较,适合一行内含多项的关键词串
  • 按字符比较单个字符,会丢弃空白,适用场景很窄
  • 首尾空白会影响按行判断,必要时勾选「忽略首尾空白」
  • 分隔符必须与实际数据一致,否则拆分会失败
  • 结果不符合预期时先检查去重单位,再怀疑工具
阅读 13