2013-10-28

Ubuntu 用 uniq 和 sort 指令清除重複行和空白行

以前阿舍遇到檔案裡有重複行和空白行要清除時,阿舍就會借用 Excel 或 UltraEdit 來處理,但是,每次都記不太住操作的步驟,每遇到一次就要上網來查一次,不過,阿舍會記不住是因為阿舍覺得用這二套來處理的方式都有一點點的麻煩哩 ! 所以,就沒有很記住哩 ! (其實,是因為也沒有很常遇到哩 ! 不然,不記也不行囉 ! 呵呵 ! ) ,然後,最近看到 uniq 和 sort 這個二指令才發現,原來,在 Ubuntu 或 Linux 上,只要一行指令就可以搞定了哩 ! ....

一行指令完成
舉例來說,阿舍有一個叫做 chtuniq.txt 的文字檔案,裡面的內容如上圖用 cat 指令所示的樣子,有二行重複的「中文列一」和三行分開放的空白行,如果阿舍想要把重複的行和空白行去除,只留下不重複的行的話,就可以用下面的指令來處理。

sort chtuniq.txt | uniq > result.txt

好吧 ! 阿舍自首,上面這行指令只能留下不重覆的行,所以,還是會有一個空白行的哩 ! 因此,如果想要像阿舍這麼懶惰的話,就要再借一下 sed 指令來幫忙囉 ! 就用下面這一行的組合技,就能得到滿意的結果哩 ! 

 sort chtuniq.txt | uniq | sed /^$/d > result.txt

為什麼在用 uniq 指令前要先用 sort 指令來排序一下呢 ? 這是因為 uniq 指令只跟上一行比對是否有重複而已,所以,如果重複的資料不排在一起,那麼 uniq 指令就等於是無效哩 ! 所以,在使用  uniq 指令前,要先搖一搖,喔 ! 不! 是要先用 sort 指令排一排哩 ! 

另外,從阿舍的範例檔就能發現,sort 和 uniq 指令都有支援 Unicode 的正體中文字的排序哩 ! 真是讚哩 ! .... ^^=

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁