uniq命令除去重複行注意點詳解

pythontab發表於2014-10-20

一. uniq幹什麼用的

文字中的重複行,基本上不是我們所要的,所以就要去除掉。linux下有其他命令可以去除重複行,但是我覺得uniq還是比較方便的一個。使用uniq的時候要注意以下二點

1,對文字操作時,它一般會和sort命令進行組合使用,因為uniq 不會檢查重複的行,除非它們是相鄰的行。如果您想先對輸入排序,使用sort -u。

2,對文字操作時,若域中為先空字元(通常包括空格以及製表符),然後非空字元,域中字元前的空字元將被跳過

二. uniq引數說明

用法:uniq [選項]... [檔案]  

從輸入檔案或者標準輸入中篩選相鄰的匹配行並寫入到輸出檔案或標準輸出。  

  

不附加任何選項時匹配行將在首次出現處被合併。  

  

長選項必須使用的引數對於短選項時也是必需使用的。  

 -c, --count              //在每行前加上表示相應行目出現次數的字首編號  
 -d, --repeated          //只輸出重複的行  
 -D, --all-repeated      //只輸出重複的行,不過有幾行輸出幾行  
 -f, --skip-fields=N     //-f 忽略的段數,-f 1 忽略第一段  
 -i, --ignore-case       //不區分大小寫  
 -s, --skip-chars=N      //根-f有點像,不過-s是忽略,後面多少個字元 -s 5就忽略後面5個字元  
 -u, --unique            //去除重複的後,全部顯示出來,根mysql的distinct功能上有點像  
 -z, --zero-terminated   end lines with 0 byte, not newline  
 -w, --check-chars=N      //對每行第N 個字元以後的內容不作對照  
 --help              //顯示此幫助資訊並退出  
 --version              //顯示版本資訊並退出

 

三. 測試文字檔案unique.txt

python
python
pythontab
bbs.pythontab.com
python
pythontab.com
pythontab
www.pythontab.com
pythontab
pythontab


四. 例項詳解

$ uniq unique.txt
python
pythontab
bbs.pythontab.com
python   //和第一行重複
pythontab.com
pythontab //和第二行重複
www.pythontab.com
pythontab
$ uniq -c unique.txt
2 python
1 pythontab
1 bbs.pythontab.com
1 python
1 pythontab.com
1 pythontab
1 www.pythontab.com
2 pythontab

從上面的結果來看,貌似uniq命令有bug,很多重複的行沒有去掉,這是怎麼回事呢?其實這個不是它的bug,而是它的一個特性:uniq的一個特性,檢查重複行的時候,只會檢查相鄰的行。

那怎麼來解決上面的問題呢?很簡單,看下面的例項

$ sort unique.txt | uniq -c
1 bbs.pythontab.com
3 python
4 pythontab
1 pythontab.com
1 www.pythontab.com

這樣就可以很好地解決上面的問題啦。


相關文章