技巧: 用 uniq 除去重復行(轉載自ibm論壇)
重復行通常不會造成問題,但是有時候它們的確會引起問題。
此時,不必花上一個下午的時間來為它們編制過濾器,uniq 命令便是唾手可得的好工具。了解一下它是如何節(jié)省您的時間和精力的。
進行排序之后,您會發(fā)現有些行是重復的。有時候該重復信息是不需要的,可以將它除去以節(jié)省磁盤空間。
不必對文本行進行排序,但是您應當記住 uniq 在讀取行時會對它們進行比較并將只除去兩個或更多的連續(xù)行。
下面的示例說明了它實際上是如何工作的:
清單 1. 用 uniq 除去重復行
$ cat happybirthday.txt
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday Dear Tux!
Happy Birthday to You!
$ sort happybirthday.txt
Happy Birthday Dear Tux!
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday to You!
$ sort happybirthday.txt | uniq
Happy Birthday Dear Tux!
Happy Birthday to You!
警告:請不要使用
uniq 或任何其它工具從包含財務或其它重要數據的文件中除去重復行。
在這種情況下,重復行幾乎總是表示同一金額的另一個交易,將它除去會給會計部造成許多困難。千萬別這么干!
如果您希望您的工作輕松點,比如只顯示唯一的或重復的行,那么該怎么辦呢?您可以用 -u (唯一)和 -d (重復)選項來做到這一點,例如:
清單 2. 使用 -u 和 -d 選項
$ sort happybirthday.txt | uniq -u
Happy Birthday Dear Tux!
$ sort happybirthday.txt | uniq -d
Happy Birthday to You!
清單 3. 使用 -c 選項
$ sort happybirthday.txt | uniq -uc
1 Happy Birthday Dear Tux!
$ sort happybirthday.txt | uniq -dc
3 Happy Birthday to You!
就算 uniq 對完整的行進行比較,它仍然會很有用,但是那并非該命令的全部功能。特別方便的是:使用 -f 選項,
后面跟著要跳過的字段數,它能夠跳過給定數目的字段。當您查看系統日志時這非常有用。
通常,某些項要被復制許多次,這使得查看日志很難。使用簡單的 uniq 無法完成任務,因為每一項都以不同的時間戳記開頭。
但是如果您告訴它跳過所有的時間字段,您的日志一下子就會變得更加便于管理。試一試 uniq -f 3 /var/log/messages ,親眼看看。
還有另一個選項 -s ,它的功能就像 -f 一樣,但是跳過給定數目的字符。您可以一起使用 -f 和 -s 。
uniq 先跳過字段,再跳過字符。如果您只想使用一些預先設置的字符進行比較,那么該怎么辦呢?試試看 -w 選項。
此時,不必花上一個下午的時間來為它們編制過濾器,uniq 命令便是唾手可得的好工具。了解一下它是如何節(jié)省您的時間和精力的。
進行排序之后,您會發(fā)現有些行是重復的。有時候該重復信息是不需要的,可以將它除去以節(jié)省磁盤空間。
不必對文本行進行排序,但是您應當記住 uniq 在讀取行時會對它們進行比較并將只除去兩個或更多的連續(xù)行。
下面的示例說明了它實際上是如何工作的:
清單 1. 用 uniq 除去重復行
$ cat happybirthday.txt
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday Dear Tux!
Happy Birthday to You!
$ sort happybirthday.txt
Happy Birthday Dear Tux!
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday to You!
$ sort happybirthday.txt | uniq
Happy Birthday Dear Tux!
Happy Birthday to You!
警告:請不要使用
uniq 或任何其它工具從包含財務或其它重要數據的文件中除去重復行。
在這種情況下,重復行幾乎總是表示同一金額的另一個交易,將它除去會給會計部造成許多困難。千萬別這么干!
如果您希望您的工作輕松點,比如只顯示唯一的或重復的行,那么該怎么辦呢?您可以用 -u (唯一)和 -d (重復)選項來做到這一點,例如:
清單 2. 使用 -u 和 -d 選項
$ sort happybirthday.txt | uniq -u
Happy Birthday Dear Tux!
$ sort happybirthday.txt | uniq -d
Happy Birthday to You!
清單 3. 使用 -c 選項
$ sort happybirthday.txt | uniq -uc
1 Happy Birthday Dear Tux!
$ sort happybirthday.txt | uniq -dc
3 Happy Birthday to You!
就算 uniq 對完整的行進行比較,它仍然會很有用,但是那并非該命令的全部功能。特別方便的是:使用 -f 選項,
后面跟著要跳過的字段數,它能夠跳過給定數目的字段。當您查看系統日志時這非常有用。
通常,某些項要被復制許多次,這使得查看日志很難。使用簡單的 uniq 無法完成任務,因為每一項都以不同的時間戳記開頭。
但是如果您告訴它跳過所有的時間字段,您的日志一下子就會變得更加便于管理。試一試 uniq -f 3 /var/log/messages ,親眼看看。
還有另一個選項 -s ,它的功能就像 -f 一樣,但是跳過給定數目的字符。您可以一起使用 -f 和 -s 。
uniq 先跳過字段,再跳過字符。如果您只想使用一些預先設置的字符進行比較,那么該怎么辦呢?試試看 -w 選項。
posted on 2007-11-19 10:23 Khan 閱讀(1079) 評論(1) 編輯 收藏 引用 所屬分類: 跨平臺開發(fā) 、周邊技術