正确删除重复行并排序列表
要删除重复行,就删掉每一条与前面某行重复的行。但先要决定“相同”是指完全一致,还是清理后一致。完全匹配删除是安全的,却会漏掉大多数实际存在的重复项。去掉首尾空格并忽略大小写能找出多得多的重复项,这正是大多数人处理邮箱、关键词或商品编码列表时真正需要的。
删除重复行列表里有重复项免费使用一个实例
下面是一份从表格中复制出来的六个邮箱地址:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
这里有三个情况。第一行和最后一行完全相同。第二行只是 A 大写不同。第三行末尾有一个看不见的空格。下面是按每条规则得到的结果:
| 规则 | 保留的行数 | 原因 |
|---|---|---|
| 删除完全相同的重复行 | 5 | 只有最后一行 "anna" 与第一行完全一致 |
| 去掉空格并忽略大小写 | 3 | anna、ben 和 cara 是仅有的三个不重复的地址 |
实际使用中,邮箱地址几乎都不区分大小写,所以这里应选第二种规则。如果列表来自杂乱的网页,先用提取邮箱和链接工具处理,确保只有真正的邮箱地址进入去重步骤。
需要留意的近似重复项
近似重复项是指在电脑看来不同、但在你看来意思相同的行。常见原因包括:
- 大小写:"Blue Widget" 和 "blue widget"。
- 首尾空格,编辑器里往往看不出来。
- 不间断空格或其他隐藏字符,它们看起来和普通空格一样(隐藏字符一文对此做了说明)。
- 标点不同:"e-mail" 和 "email"。
- 复数形式,需要人工判断,工具不应自动合并。
清理顺序是:先去掉空格,再在大小写没有意义时忽略大小写,最后删除重复行。保留一份原始列表,并用比较文本对比两份列表,检查删掉了哪些内容。
大小写有时很重要
忽略大小写并不总是安全的。商品编码、Linux 上的文件名以及某些标识符都区分大小写,因此 "AB-101" 和 "ab-101" 可能是两件不同的商品。在合并仅大小写不同的条目之前,先确认接收这份列表的系统是否把它们视为同一项。
字母顺序排序与自然排序
对包含数字的列表排序,结果常常出乎意料。普通的字母排序会逐个字符比较,因此 "item10" 排在 "item2" 前面,因为字符 1 排在 2 之前。
以下是三个条目的区别:
- 字母顺序:item1, item10, item2
- 自然排序:item1, item2, item10
自然排序会把数字当作数字来比较,所以 2 排在 10 前面。为什么 10 会排在 2 前面一文有更详细的说明。文件名、货架编号、版本号以及任何以计数结尾的内容,适合用自然排序。名称和词语则适合普通的字母排序,这也是人们通常的预期。想在自己的列表上比较两种顺序,可以把内容粘贴到文本行排序中,然后在 A→Z 和 数字 之间切换。
还有两点值得注意:
- 排序不会删除重复项。应先去重再排序,否则排序只会把重复项挨在一起,便于查看,但并不会删除它们。
- 如果列表本身有含义,就保持原有顺序。步骤清单或排名表不应排序。
保留第一次出现的行
删除重复行时,大多数工具会保留每个行的第一次出现,并丢弃之后的。当行中带有额外信息时,比如姓名和日期,这一点很重要。如果第一条是过时的版本,那么在删除之前,先按日期排序,或者手动核对重复项。
检查结果
在处理前后分别统计行数。在邮箱的例子中,六行变成了三个不重复的地址,因此删掉了三行。如果删掉的行数比预期少,就检查被删除的行。重复删除是按整行匹配的,所以列表中两位姓名相同的不同人员,或标题相同但编码不同的两件商品,一旦去掉编码,看起来就完全一样。应当只对定义条目的字段去重,而不是对只用来描述的字段去重。
在 fixmint 中操作
- 把列表粘贴到你的列表中,每行一项。
- 保持去除空格勾选(默认已勾选),只有在大小写没有意义时才勾选忽略大小写。
- 勾选删除空行,同时去掉空白行。
- 选择排序方式:保持原顺序、A→Z 或 数字。
- 复制结果,或使用下载 .txt。
特殊情况
- 空行。 连续的几个空行可能会被当作重复项。如果想保留一个空行用于分隔,请把删除空行作为单独的步骤。
- 多行记录。 重复删除是逐行进行的。如果每条记录跨越多行,它可能会拆散记录,并使各部分顺序错乱。
- 超大列表。 大文件可以处理,但请对比输出行数和输入行数,以便了解改动了什么。
常见问题
删除重复行时会同时排序吗?
不一定。很多工具会保持原有顺序,所以如果需要排序,请单独操作。
为什么排序时 item10 会排在 item2 前面?
普通字母排序逐个字符比较,而字符 1 排在 2 之前。请使用自然排序,它会把数字当作数字来比较。
删除重复邮箱时应该忽略大小写吗?
通常应该,因为实际中邮箱地址被视为不区分大小写。对于大小写会改变含义的标识符,不要忽略大小写。
由 AI 辅助翻译自英文原文。
评论
还没有评论。快来抢沙发。


