您好,登錄后才能下訂單哦!
小編給大家分享一下linux中如何對文本進行高效排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
按照字典順序排序
假如有文本內容test1.txt如下(偷偷問一句:你在使用哪個linux發行版?):
Debian Gentoo GentooCentOSFedora 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 -k 2 test2.txt #默認以空白作為分隔符
sort -k 2 -t ' ' sort2.txt #以空格為分隔符
結果如下:
1 apple 1976 2 google 1998 10 icbc 1984 16 samsung 1938 5 tencent 1998
可以看到,最后會以第二列,即公司名稱為依據排序輸出。
以多列為依據排序
假設我們按照公司創建年份排序,如果年份相同,則按照公司名稱排序,即分別以第三列,第二列為依據排序:
sort -n -k 3 -k 2 test2.txt
輸出結果如下:
16 samsung 1938 1 apple 1976 10 icbc 1984 2 google 1998 5 tencent 1998
如果要按照年份降序排序,則只需加-r參數即可:
sort -n -k 3r -k 2 test2.txt
輸出結果如下:
2 google 1998 5 tencent 1998 10 icbc 1984 1 apple 1976 16 samsung 1938
按照特定列的特定字符排序
假如我們想要按照公司名稱的第二至第三個字符排序,可以使用下面的方式:
sort -t ' ' -k 2.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 -t ' ' -k 2.2 test2.txt
保存排序結果
前面的排序命令僅僅是將排序結果打印到控制臺,并沒有修改源文件,如果想要將排序結果保存在文件中,需要使用-o參數:
sort test1.txt -o test1.txt #直接修改源文件 sort test1.txt -o output.txt #輸出到另外一個文件 sort test1.txt > output.txt #重定向到output.txt中
如果想將排序結果保存在源文件中,只能使用-o參數,而如果是其他文件,既可以使用-o參數,也可以使用重定向。
檢查是否亂序
sort同樣也可以用來檢查文本內容是否已經是排好序的。
例如:
sort -c test1.txt #打印結果,并告知無序開始的行數 sort -C test1.txt #不打印結果,但是命令的返回結果為1
合并已排序的文本
可以使用-m選項來合并已經排好序的文本,但不會重新排序。
例如:
sort -m file1 file2
總結
以上就是使用sort命令對文本進行排序的常見使用方法,更多內容可使用man命令進行查看。常見選項如下:
-r 按照降序排列 -n 按照數值大小排列 -k 按照指定列排列 -t 指定分隔符 -u 去重 -o 輸出結果到文件中
以上是“linux中如何對文本進行高效排序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。