Linux

cat file.txt 之間的區別 |sort -u 和 cat file.txt |獨特的

  • August 26, 2019

我想知道 sort -u 和 uniq 之間的區別。我嘗試使用下面的命令來獲取文件中唯一字元串的計數,sort -u 和 uniq 根據我的知識提供了相同的輸出。那為什麼它提供了兩種不同的計數。

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

為什麼它顯示兩個不同的行數?

嚴格來說,uniq不需要排序輸入 - 但確實uniq只會刪除連續的重複行。

不同之處在於:

  • sort對文件進行排序,並且(使用其-u選項)還可以消除重複的行,這些行現在都是連續的,因為它們已被排序。
  • uniq刪除連續的重複行。它還具有僅輸出重複行的選項(行帶有-d,或所有重複行帶有-D),並且可以輸出一行在輸入中出現的次數(-c)。它還有其他選項來控制如何檢測欺騙,例如跳過欄位和僅比較一行中的 N 個字元。
  • 如果你想結合兩者的特性,sort當然可以通過管道輸入。uniq

sort -u當您不關心保留輸入文件的順序或實際上希望它排序時很有用 - 但輸出中根本不希望重複。

uniq在需要保留輸入順序時很有用,或者當您只關心連續重複時 - 例如,當您想要對已經排序的文件進行 uniq 時(無需浪費 CPU 和 IOPS 再次對其進行排序);或刪除段落之間的所有連續換行符(例如,pdftotext通常在行或段落之間產生大量空白 -uniq可以刪除額外內容,使其更易於閱讀或編輯)。

引用自:https://unix.stackexchange.com/questions/537326