Bash Scripting

高效去除Bash中重复行

Spread the love

从文本文件中删除重复行是Bash脚本中的一项常见任务。本文探讨了两种高效的方法:使用sortuniq,以及利用awk的强大功能。

目录

使用sortuniq

这种方法结合了两个基本的Unix实用程序,提供了一个直接的解决方案。sort按字母顺序排列行,这是uniq的先决条件,uniq随后消除连续的重复项。每行的*第一次*出现顺序将被保留。

以下是命令:


sort file.txt | uniq > file_unique.txt

这将file.txt排序后的输出通过管道传递给uniq,并将唯一行保存到file_unique.txt中。原始文件保持不变。

示例:

如果file.txt包含:


apple
banana
apple
orange
banana
grape

file_unique.txt将包含:


apple
banana
grape
orange

使用awk命令

awk提供了一种更灵活、更强大的解决方案,尤其是在保留行的原始顺序至关重要时。它使用关联数组来跟踪遇到的行。

该命令非常简洁:


awk '!seen[$0]++' file.txt > file_unique.txt

让我们分解一下:

  • $0表示当前整行。
  • seen[$0]访问seen数组中的一个元素,使用该行作为键。
  • ++后增量值(最初为0)。
  • !否定结果;只有在第一次遇到该行时(当seen[$0]为0时),才会打印该行。

此方法保持行的原始顺序。

示例:

使用相同的file.txtfile_unique.txt中的输出将为:


apple
banana
orange
grape

结论:

这两种方法都能有效地删除重复行。对于基本场景,sort | uniq 更简单;而awk则提供更好的灵活性和控制,尤其是在保留原始顺序或处理更复杂的重复删除需求时。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注