如何使用Linux shell脚本生成文本文件中唯一行的列表?

17
假设我有一个文件,其中包含许多行,有一些重复:
line1
line1
line1
line2
line3
line3
line3

我应该使用哪些Linux命令来生成唯一行的列表

line1
line2
line3

如果文件未排序,即重复行可能不在块中,这会改变吗?

4个回答

35

如果你不介意输出被排序,可以使用

sort -u

这将排序并删除重复项


11

cat 命令用于输出文件的内容,管道符号 "|" 用于将其输出结果传输给 sort 命令进行排序,再通过管道将排序后的结果传递给 uniq 命令以输出唯一值。

如果文件内容已经排好序,则不需要执行 sort 部分。


7
创建一个具有唯一行的新的排序文件:
sort -u file >> unique_file

创建一个包含唯一行(未排序)的新文件:

cat file | uniq >> unique_file

1
如果我们不关心顺序,那么最好的解决方案实际上是:
sort -u file

如果我们还想忽略大小写,可以使用它(结果所有字母都将转换为大写):
sort -fu file

看起来,甚至更好的想法是使用命令:

uniq file

如果我们还想忽略大小写(结果是返回重复的第一行,而不改变大小写):

uniq -i file

然而,在这种情况下,返回的结果可能与使用“sort”命令时完全不同,因为“uniq”命令只有在重复行相邻时才能检测到重复行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接