一個Linux命令幫你對文本排序
來自:編程珠璣(微信號:shouwangxiansheng)
前言
在Linux下,有時候需要對文本內容進行排序,例如按照字典順序排序,按照數字排序或者按照特定列排序等等。今天我們就藉助一個命令-sort來滿足我們對文本排序的需求。
按照字典順序排序
假如有文本內容test1.txt如下(偷偷問一句:你在使用哪個linux發行版?):
Debian
Gentoo
Gentoo
CentOS
Fedora
ubuntu
Kali
redhat
Arch
OpenSuse
現在要對文本內容按照字典升序排序,只需使用下面的命令即可:
sort test1 .txt
輸出結果如下:
Arch
CentOS
Debian
Fedora
Gentoo
Gentoo
Kali
OpenSuse
redhat
ubuntu
可以看到輸出結果按照字典順序的升序進行了排序。如果需要降序輸出只需要使用-r參數,如:
sort -r test1 .txt
輸出結果如下:
ubuntu
redhat
OpenSuse
Kali
Gentoo
Gentoo
Fedora
Debian
CentOS
Arch
去除重複行
我們看到前面有兩行的內容是重複的,即Gentoo行,使用-u參數可以去掉重複的行:
sort -u test1 .txt
輸出結果如下:
Arch
CentOS
Debian
Fedora
Gentoo
Kali
OpenSuse
redhat
ubuntu
在輸出結果中,重複的Gentoo行被去掉了。
按照數字排序
假設有文本內容test2.txt如下,第一列為市值排名,第二列為公司名稱,第三列為公司創建時間:
2 google 1998
10 icbc 1984
5 tencent 1998
1 apple 1976
16 samsung 1938
按照前面的介紹,我們對內容排序結果如下:
10 icbc 1984
16 samsung 1938
1 apple 1976
2 google 1998
5 tencent 1998
這不對啊,16怎麼在1前面呢?很顯然這是因為前面的排序都是字典排序,而我們實際需要的是按照數值大小進行排序,因此需要用到-n參數:
sort -n test2 .txt
最後的輸出結果如下:
1 apple 1976
2 google 1998
5 tencent 1998
10 icbc 1984
16 samsung 1938
可以看到,最終結果按照市值排名列印出來。
按照指定列排序
假如我們不想按照市值排名排序,而是按照公司名稱排序呢?那麼就需要按照指定列排序了。這裡需要用到兩個參數:
-t 指定分隔符,未指定時,默認分隔符為空白
-k 指定列排序
需要按照第二列,公司名稱排序,因此排序命令如下:
sort 2
test2.txt
#默認以空白作為分隔符
sort
-k2
-t" "
sort2.txt#以空格為分隔符
結果如下:
1 apple 1976
2 google 1998
10 icbc 1984
16 samsung 1938
5 tencent 1998
可以看到,最後會以第二列,即公司名稱為依據排序輸出。
以多列為依據排序
假設我們按照公司創建年份排序,如果年份相同,則按照公司名稱排序,即分別以第三列,第二列為依據排序:
sort -n -k -k test2 .txt
輸出結果如下:
16 samsung 1938
1 apple 1976
10 icbc 1984
2 google 1998
5 tencent 1998
如果要按照年份降序排序,則只需加-r參數即可:
sort -n
-k
3r
-k
2test2
.txt
輸出結果如下:
2 google 1998
5 tencent 1998
10 icbc 1984
1 apple 1976
16 samsung 1938
按照特定列的特定字元排序
假如我們想要按照公司名稱的第二至第三個字元排序,可以使用下面的方式:
sort
-t
" "
-k2
.2
,2
.3
test2.txt輸出結果如下:
16 samsung 1938
10 icbc 1984
5 tencent 1998
2 google 1998
1 apple 1976
-k 2.2,2.3指定了按照第二列排序,並且是第二列的第二個字元開始,到第三個字元結束。可以看到,由於samsung的第二個字母是a而排在開頭。如果是以第二個字元開始,到最後一個字元結束,則用下面的命令即可:
sort " " 2 2
保存排序結果
前面的排序命令僅僅是將排序結果列印到控制台,並沒有修改源文件,如果想要將排序結果保存在文件中,需要使用-o參數:
sort test1 .txt -o test1 .txt sort test1 .txt -o output .txt sort test1 .txt output .txt output .txt
如果想將排序結果保存在源文件中,只能使用-o參數,而如果是其他文件,既可以使用-o參數,也可以使用重定向。
檢查是否亂序
sort同樣也可以用來檢查文本內容是否已經是排好序的。
例如:
sort #列印結果,並告知無序開始的行數 sort #不列印結果,但是命令的返回結果為1
合併已排序的文本
可以使用-m選項來合併已經排好序的文本,但不會重新排序。
例如:
sort
總結
以上就是使用sort命令對文本進行排序的常見使用方法,更多內容可使用man命令進行查看。常見選項如下:
-r 按照降序排列
-n 按照數值大小排列
-k 按照指定列排列
-t 指定分隔符
-u 去重
-o 輸出結果到文件中
●編號638,輸入編號直達本文
●輸入m獲取文章
目錄
推薦↓↓↓
運維
更多推薦
《
25個技術類公眾微信
》
涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※Windows 現在擁有平台獨有的 Linux 發行版 — WLinux
※Linux 內核版本那麼多,你應該選擇哪個穩定版本?
TAG:Linux學習 |