Sort
為什麼 uniq 實用程序會給我意想不到的結果?
我正在創建一個 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,甚至是要處理的文件列表)。