【发布时间】:2014-10-08 01:51:00
【问题描述】:
我有一个名为“test.txt”的文件,如下所示:
10
10
10
8
10
9
10
10
9
10
8
由于某种原因,当我运行 uniq test.txt 时,我得到了以下输出:
10
8
10
9
10
9
10
8
为什么我会得到这个输出?我正在使用 BSD uniq。程序中是否存在某种错误?
【问题讨论】:
我有一个名为“test.txt”的文件,如下所示:
10
10
10
8
10
9
10
10
9
10
8
由于某种原因,当我运行 uniq test.txt 时,我得到了以下输出:
10
8
10
9
10
9
10
8
为什么我会得到这个输出?我正在使用 BSD uniq。程序中是否存在某种错误?
【问题讨论】:
我不是专家,但我很确定 uniq 只比较相邻的行。我不必经常使用它,但是在我的系统上运行 man uniq 我得到:
uniq 实用程序读取指定的 input_file 比较相邻行, 并将每个唯一输入行的副本写入 output_file。如果 input_file 是单个破折号 (`-') 或不存在,则读取标准输入。 如果 output_file 不存在,则使用标准输出进行输出。第二 并且不写入相同相邻输入行的后续副本。 如果它们不是相邻的,则不会检测到输入中的重复行 分,所以可能需要先对文件进行排序。
因此它们必须相邻才能被检测到。因此,反复报道。它们与相邻的行不同,而这都是 uniq 实际测试的。
希望对您有所帮助。让我知道我是否错过了什么,我其实也有点好奇。
【讨论】:
uniq 的先决条件是输入已排序(或者它会做一些与锡上说的有点不同的事情)。这就是为什么经常使用sort -u 的原因——它通过一个进程完成这两个步骤。
uniq 只比较相邻的行。这就是规则。我改用sort -u。