如何删除重复行:Excel、Notepad++、命令行和快速方法
从列表中删除重复行听起来很简单,直到您实际上需要对真实数据执行此操作。合并两个邮件列表,它们就会在接缝处发生冲突。导出关键字报告,相同的术语出现十五次。粘贴日志文件并重复一半行。有多种方法可以消除列表中的重复项,每种方法都有一个快速教程很少提及的问题,特别是在保留原始顺序和捕获不完全相同的重复项方面。
Excel 方法及其失败之处
Excel 在“数据”选项卡下有一个内置的“删除重复项”按钮,对于干净的数据,它可以正常工作:选择您的列,单击按钮,完成。问题始于混乱的数据。 Excel 的工具仅删除完全相同的行,因此“apple”和“apple ”(尾随空格)被视为不同的行,并且都保留下来。如果您需要不区分大小写的匹配,“Apple”与“apple”也是如此; Excel 的默认比较将保留两者。您必须将列表加载到电子表格中,然后首先将其设置为适当的列,如果您只有一段文本,这会很麻烦。
当您的数据已存在于电子表格中并且是干净的时,Excel 是一个合理的选择。对于粘贴文本的快速重复数据删除,或者当出现空格和大小写不一致时,通常会带来麻烦而不值得。
Notepad++和顺序问题
Notepad++ 可以通过其 TextFX 插件删除重复行,该插件在 Windows 开发人员中很受欢迎。但有一个重要的问题:TextFX“删除重复行”功能还会按字母顺序对行进行排序,这是一个副作用。如果列表的顺序很重要,例如按时间顺序排列的日志、排名列表、一系列步骤,Notepad++ 会打乱它。你会得到独特的线条,但不是按照你开始的顺序。对于许多任务来说,这是一个破坏性的事情。
命令行:排序和uniq
在 Linux 和 macOS 上,经典方法是 uniq 命令。这里的要点很重要:uniq 仅删除彼此相邻的重复行。如果您的重复项分散在文件中,uniq 将错过它们。标准修复方法是首先对文件进行排序并将其通过管道传输到 uniq,但是排序再次会破坏原始顺序。 awk 有更高级的单行语句可以保留顺序,但现在您正在为应该是一键式任务的代码编写代码,并且很容易出错。
命令行功能强大且可编写脚本,当重复数据删除是更大的自动化管道的一部分时,它是理想的选择。对于您面前的清单上的一次性工作,设置成本很高。
他们都有一个共同点:几乎重复
默认情况下,上述每种方法仅捕获精确的重复项。但现实世界的复制品通常并不精确。同一电子邮件地址显示为“Name@site.com”和“name@site.com”。同一条目在一行上有一个杂散的尾随空格。相同的名字大小写不同。这些近似重复的内容会通过精确匹配工具,给您留下一个看起来干净但实际上并非如此的列表。真正清理列表意味着能够在比较过程中忽略大小写并修剪空格,这是 Excel 和 basic uniq 无法轻松提供的选项。
快速方法:保持顺序的浏览器工具
对于常见情况,您有一个列表,想要独特的行,并且想要保留原始顺序,基于浏览器的工具是最快的路径。粘贴列表,立即获得去重结果,每行的第一次出现都保持在原来的位置。无需电子表格设置,无需插件,无需记住命令,无需强制排序。好的工具还可以让您切换不区分大小写的匹配和空白修剪,这样您就可以捕获其他方法错过的近似重复项。
由于客户端工具会处理浏览器中的所有内容,因此不会上传任何内容,当列表是电子邮件列表或您不想发送到服务器的任何数据时,这一点很重要。而且浏览器内存之外没有任何实际限制,因此可以立即处理数万行。
常见工作流程:重复数据删除然后排序
重复数据删除和排序通常是一项清理工作的两部分。常见的模式是首先删除重复项,保持顺序,然后有意对干净的结果进行排序,这正是您在准备整洁的参考列表、一组干净的关键字或按字母顺序排列的术语表时想要的。按照这个顺序进行操作意味着您可以进行一次干净的传递以确保唯一性,并进行一次深思熟虑的传递以确保顺序,而不是让工具对列表进行排序作为不需要的副作用。
使用哪种方法
当数据已存在于干净的电子表格中时,请选择 Excel。当重复数据删除是自动化脚本中的一个步骤时,请选择命令行。当您面前有一个列表并希望在几秒钟内删除重复项并保留顺序并捕获接近重复项时,请使用浏览器工具,对于大多数人来说,大多数时候,情况正是如此。