Sort

為什麼 uniq 實用程序會給我意想不到的結果?

  • December 27, 2018

我正在創建一個 shellscript,它將列印出我們目錄中的各種文件類型。它幾乎可以工作,但是,由於某些奇怪的原因,當我嘗試在我的輸出上使用 uniq 時,它不起作用。這是我的輸入(和 的值$FILE_TYPE

POSIX shell script, ASCII text executable
ASCII text
Bourne-Again shell script, ASCII text executable
UTF-8 Unicode text, with overstriking
Bourne-Again shell script, ASCII text executable

但是,當我使用

FILE_TYPE_COUNT=`echo "$FILE_TYPE" | sort | uniq -c`

這是它列印的結果

 1 POSIX shell script, ASCII text executable
 1 ASCII text
 1 Bourne-Again shell script, ASCII text executable
 1 UTF-8 Unicode text, with overstriking
 1 Bourne-Again shell script, ASCII text executable

顯然應該是

 1 POSIX shell script, ASCII text executable
 1 ASCII text
 2 Bourne-Again shell script, ASCII text executable
 1 UTF-8 Unicode text, with overstriking

知道我做錯了什麼嗎?

在過濾文件之前,您沒有對文件進行排序。從手冊頁

注意:uniq除非它們相鄰,否則不會檢測重複的線條。您可能想先對輸入進行排序,或者sort -u不使用uniq. 此外,比較遵循由 指定的規則LC_COLLATE

您還需要一次性處理所有要計數的行。目前,您一次處理一種文件類型,因此uniq -c正確地告訴您每種文件類型都有一種——它一次只能看到一種文件類型。

file * | sort | uniq -c

會更合適(可能使用更具體的 glob,甚至是要處理的文件列表)。

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