sort data.txt | 有什么区别? uniq -q 只是 'uniq -q'?

What is the difference between sort data.txt | uniq -q and just 'uniq -q'?

我知道它排序并且输出用于找出文件中的唯一语句。我还觉得 uniq -u 应该打印文件中的每个唯一语句。

uniq -u data.txt

此语句的输出是:

MsxcvOe3PGrt78wpZG2bBNF5wfXpZhET
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
4c7EsUtqLnLR9hiepV5EQVhdMgyi8onL
1drBmDT7PYS7hVgoTWkJSjUZUK7ZAIAa
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
78rgduVcLZjLzZmooObdaN541MKV6IfQ
x0bga8Oxz5lgM8k52HrYy4ez7XJI0lM0
irGm6F73sbUrFhHukhp6JXgMQyLxJTz1

然而当我运行

sort data.txt | uniq -u

输出为: UsvVyFSfZZWbi6wgC7dAFyFuR62324324324

我无法理解为什么只有一行输出时第一条语句打印列表。

Uniq 只比较相邻的行。因此,以下输入的 uniq -u 将不会检测重复项并打印出所有内容

foo
bar
foo
bar

如果您先调用排序,您将得到一个已正确删除重复数据的排序列表。您稍后可能在文件中有一些重复项

uniq 实用程序读取指定的输入文件并仅比较相邻行并将每个唯一输入行的副本写入输出文件。

例如,如果您的数据是:

1
1
2
5
4
1

uniq -u data 的输出将是:

2
5
4
1

sort data | uniq -u 的输出如下:

排序输出:

1 
1
1
2
4
5

当它传递给 uniq -u 时,输出将是:

2
4
5