cat file.txt | 之间的区别sort -u 和 cat file.txt |独特的

cat file.txt | 之间的区别sort -u 和 cat file.txt |独特的

我想知道 sort -u 和 uniq 之间的区别。我尝试使用下面的命令来获取文件中唯一字符串的计数,sort -u 和 uniq 根据我的知识提供了相同的输出。那为什么它提供了两个不同的计数。

cat test.txt | sort -u | wc -l 
351
cat test.txt | uniq | wc -l
370

为什么它显示两个不同的行数?

答案1

严格来说,uniq不需要排序输入 - 但确实uniq只会删除连续的重复行。

不同之处在于:

  • sort对文件进行排序,并且(使用其-u选项)还可以消除重复的行,这些重复的行现在在排序后都是连续的。

  • uniq删除连续的重复行。它还具有仅输出重复行的选项(每个与-d, 或全部欺骗-D),并且可以输出一行在输入 ( ) 中出现的次数-c。它还具有其他选项来控制如何检测重复项,例如跳过字段和仅比较一行中的 N 个字符。

  • sort当然,uniq如果您想结合两者的功能,可以通过管道输入的输出。

sort -u当您不关心保留输入文件的顺序,或者实际上希望对其进行排序 - 但不希望输出中出现重复项时,它非常有用。

uniq当需要保留输入顺序时,或者当您只关心连续的重复时,例如当您想要对已经排序的文件进行 uniq 时(无需浪费 CPU 和 IOPS 再次对其进行排序),这很有用;或者删除段落之间除一个连续换行符之外的所有内容(例如,pdftotext通常在行或段落之间产生大量空白 -uniq可以删除多余的内容,使其更易于阅读或编辑)。

答案2

uniq需要输入已经排序。不按顺序出现的重复项不会被消除:

~ printf %s\\n 1 2 1 | uniq
1
2
1
~ printf %s\\n 1 2 1 | sort | uniq
1
2
~ printf %s\\n 1 2 1 | sort -u
1
2

相关内容