轉自:http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/l-tiptex6/
重複行通常不會造成問題,但是有時候它們的確會引起問題。此時,不必花上一個下午的時間來為它們編製過濾器,uniq 命令便是唾手可得的好工具。瞭解一下它是如何節省您的時間和精力的。
進行排序之後,您會發現有些行是重複的。有時候該重複資訊是不需要的,可以將它除去以節省磁碟空間。不必對文本行進行排序,但是您應當記住
uniq
在讀取行時會對它們進行比較並將只除去兩個或更多的連續行。下面的樣本說明了它實際上是如何工作的:
清單 1. 用 uniq 除去重複行
<br /> $ cat happybirthday.txt<br />Happy Birthday to You!<br />Happy Birthday to You!<br />Happy Birthday Dear Tux!<br />Happy Birthday to You!<br />$ sort happybirthday.txt<br />Happy Birthday Dear Tux!<br />Happy Birthday to You!<br />Happy Birthday to You!<br />Happy Birthday to You!<br />$ sort happybirthday.txt | uniq<br />Happy Birthday Dear Tux!<br />Happy Birthday to You!<br />
警告:請不要使用
uniq
或任何其它工具從包含財務或其它重要資料的檔案中除去重複行。在這種情況下,重複行幾乎總是表示同一金額的另一個交易,將它除去會給會計部造成許多困難。千萬別這麼幹!
|
有關 uniq 的更多資訊
本系列文章介紹了文本公用程式,它對在手冊頁和資訊頁找到的資訊作了補充。如果您開啟新的終端視窗並輸入 man uniq 或 info uniq ,或者開啟新的瀏覽器視窗並查看 位於 gnu.org 的 uniq 手冊頁 ,那麼就可以瞭解更多的相關資訊。 |
|
如果您希望您的工作輕鬆點,比如只顯示唯一的或重複的行,那麼該怎麼辦呢?您可以用
-u
(唯一)和
-d
(重複)選項來做到這一點,例如:
清單 2. 使用 -u 和 -d 選項
$ sort happybirthday.txt | uniq -u<br />Happy Birthday Dear Tux!<br />$ sort happybirthday.txt | uniq -d<br />Happy Birthday to You!
您還可以用
-c
選項從
uniq
中擷取一些統計資訊:
清單 3. 使用 -c 選項
$ sort happybirthday.txt | uniq -uc<br />1 Happy Birthday Dear Tux!<br />$ sort happybirthday.txt | uniq -dc<br />3 Happy Birthday to You!<br />
就算
uniq
對完整的行進行比較,它仍然會很有用,但是那並非該命令的全部功能。特別方便的是:使用
-f
選項,後面跟著要跳過的欄位數,它能夠跳過給定數目的欄位。當您查看系統日誌時這非常有用。通常,某些項要被複製許多次,這使得查看日誌很難。使用簡單的
uniq
無法完成任務,因為每一項都以不同的時間戳記開頭。但是如果您告訴它跳過所有的時間欄位,您的日誌一下子就會變得更加便於管理。試一試
uniq -f 3 /var/log/messages
,親眼看看。
還有另一個選項
-s
,它的功能就像
-f
一樣,但是跳過給定數目的字元。您可以一起使用
-f
和
-s
。
uniq
先跳過欄位,再跳過字元。如果您只想使用一些預先設定的字元進行比較,那麼該怎麼辦呢?試試看
-w
選項。