Linux命令根據某一列對檔案內容去重

pythontab發表於2018-11-16

大家可能經常遇到檔案內容排序去重處理的事情,使用 linux 命令可以很方便的處理,sort 命令在處理檔案排序和去重中起著非常重要的左右,是檔案處理的利器。

比如有以下檔案內容:

pythontab.com

4345            15              12121
4145            7               fdf
4245            5               dfsf
1345            76              432423
0693            2               4345
06a7            82              4e
06a9            58              e33
4345            68              343
06c1            56              453
06d7            145             45678
4345            117             21
06e3            280             76
4345            7               3434
4345            48              80
06f1            463             121
4345            3847            131
070b            1236            64
070d            3343            77
0713            104235          90
0715            6               12
0726            121             97798


想要按照第二列排序去重,怎麼做呢?其實只需要 sort 命令就可以解決了

sort -t $'\t' -k 2 -u pythontab.com


sort 排序命令

-t 指定分隔符為‘\t’

-k 指定第三列

-u 去重


sort的其他一些選項:

-r 降序排列

-o 把排序結果輸出到原始檔


sort預設是把結果輸出到標準輸出,所以需要用重定向才能將結果寫入檔案,形如

sort filename>newfile

如果將結果輸出到原檔案,用重定向相當於清空


-n 看為數字來比較


你有沒有遇到過10比2小的情況。我反正遇到過。出現這種情況是由於排序程式將這些數字按字元來排序了,排序程式會先比較1和2,顯然1小,所以就將10放在2前面嘍。這也是sort的一貫作風。

我們如果想改變這種現狀,就要使用-n選項,來告訴sort,“要以數值來排序”!


-f 會將小寫字母都轉換為大寫字母來進行比較,亦即忽略大小寫


-c 會檢查檔案是否已排好序,如果亂序,則輸出第一個亂序的行的相關資訊,最後返回1


-C 會檢查檔案是否已排好序,如果亂序,不輸出內容,僅返回1


-M 會以月份來排序,比如JAN小於FEB等等


-b 會忽略每一行前面的所有空白部分,從第一個可見字元開始比較。


相關文章