久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux中如何對文本進行高效排序

161次閱讀
沒有評論

共計 2394 個字符,預(yù)計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 linux 中如何對文本進行高效排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

按照字典順序排序

假如有文本內(nèi)容 test1.txt 如下(偷偷問一句:你在使用哪個 linux 發(fā)行版?):

Debian
Gentoo
GentooCentOSFedora
ubuntu
redhat
OpenSuse

現(xiàn)在要對文本內(nèi)容按照字典升序排序,只需使用下面的命令即可:

sort test1.txt

輸出結(jié)果如下:

Arch
CentOS
Debian
Fedora
Gentoo
Gentoo
OpenSuse
redhat
ubuntu

可以看到輸出結(jié)果按照字典順序的升序進行了排序。如果需要降序輸出只需要使用 - r 參數(shù),如:

sort -r test1.txt

輸出結(jié)果如下:

ubuntu
redhat
OpenSuse
Gentoo
Gentoo
Fedora
Debian
CentOS
Arch

去除重復(fù)行

我們看到前面有兩行的內(nèi)容是重復(fù)的,即 Gentoo 行,使用 - u 參數(shù)可以去掉重復(fù)的行:
sort -u test1.txt
輸出結(jié)果如下:

Arch
CentOS
Debian
Fedora
Gentoo
OpenSuse
redhat
ubuntu

在輸出結(jié)果中,重復(fù)的 Gentoo 行被去掉了。

按照數(shù)字排序

假設(shè)有文本內(nèi)容 test2.txt 如下,第一列為市值排名,第二列為公司名稱,第三列為公司創(chuàng)建時間:

2 google 1998
10 icbc 1984
5 tencent 1998
1 apple 1976
16 samsung 1938

按照前面的介紹,我們對內(nèi)容排序結(jié)果如下:

10 icbc 1984
16 samsung 1938
1 apple 1976
2 google 1998
5 tencent 1998

這不對啊,16 怎么在 1 前面呢?很顯然這是因為前面的排序都是字典排序,而我們實際需要的是按照數(shù)值大小進行排序,因此需要用到 - n 參數(shù):
sort -n test2.txt
最后的輸出結(jié)果如下:

1 apple 1976
2 google 1998
5 tencent 1998
10 icbc 1984
16 samsung 1938

可以看到,最終結(jié)果按照市值排名打印出來。

按照指定列排序

假如我們不想按照市值排名排序,而是按照公司名稱排序呢?那么就需要按照指定列排序了。這里需要用到兩個參數(shù):
-t 指定分隔符,未指定時,默認(rèn)分隔符為空白
-k 指定列排序
需要按照第二列,公司名稱排序,因此排序命令如下:
sort -k 2 test2.txt #默認(rèn)以空白作為分隔符
sort -k 2 -t sort2.txt #以空格為分隔符
結(jié)果如下:

1 apple 1976
2 google 1998
10 icbc 1984
16 samsung 1938
5 tencent 1998

可以看到,最后會以第二列,即公司名稱為依據(jù)排序輸出。

以多列為依據(jù)排序

假設(shè)我們按照公司創(chuàng)建年份排序,如果年份相同,則按照公司名稱排序,即分別以第三列,第二列為依據(jù)排序:

sort -n -k 3 -k 2 test2.txt

輸出結(jié)果如下:

16 samsung 1938
1 apple 1976
10 icbc 1984
2 google 1998
5 tencent 1998

如果要按照年份降序排序,則只需加 - r 參數(shù)即可:

sort -n -k 3r -k 2 test2.txt

輸出結(jié)果如下:

2 google 1998
5 tencent 1998
10 icbc 1984
1 apple 1976
16 samsung 1938

按照特定列的特定字符排序

假如我們想要按照公司名稱的第二至第三個字符排序,可以使用下面的方式:

sort -t     -k 2.2,2.3 test2.txt

輸出結(jié)果如下:

16 samsung 1938
10 icbc 1984
5 tencent 1998
2 google 1998
1 apple 1976

-k 2.2,2.3 指定了按照第二列排序,并且是第二列的第二個字符開始,到第三個字符結(jié)束。可以看到,由于 samsung 的第二個字母是 a 而排在開頭。如果是以第二個字符開始,到最后一個字符結(jié)束,則用下面的命令即可:

sort -t     -k 2.2 test2.txt

保存排序結(jié)果

前面的排序命令僅僅是將排序結(jié)果打印到控制臺,并沒有修改源文件,如果想要將排序結(jié)果保存在文件中,需要使用 - o 參數(shù):

sort test1.txt -o test1.txt # 直接修改源文件
sort test1.txt -o output.txt # 輸出到另外一個文件
sort test1.txt   output.txt # 重定向到 output.txt 中

如果想將排序結(jié)果保存在源文件中,只能使用 - o 參數(shù),而如果是其他文件,既可以使用 - o 參數(shù),也可以使用重定向。

檢查是否亂序

sort 同樣也可以用來檢查文本內(nèi)容是否已經(jīng)是排好序的。
例如:

sort -c test1.txt # 打印結(jié)果,并告知無序開始的行數(shù)
sort -C test1.txt # 不打印結(jié)果,但是命令的返回結(jié)果為 1 

合并已排序的文本

可以使用 - m 選項來合并已經(jīng)排好序的文本,但不會重新排序。
例如:

sort -m file1 file2

總結(jié)
以上就是使用 sort 命令對文本進行排序的常見使用方法,更多內(nèi)容可使用 man 命令進行查看。常見選項如下:

-r  按照降序排列
-n  按照數(shù)值大小排列
-k  按照指定列排列
-t  指定分隔符
-u  去重
-o  輸出結(jié)果到文件中

以上是“l(fā)inux 中如何對文本進行高效排序”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-07發(fā)表,共計2394字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 太保市| 陕西省| 志丹县| 雷州市| 两当县| 银川市| 泸溪县| 固原市| 六安市| 福州市| 忻州市| 武宣县| 金寨县| 郁南县| 正蓝旗| 水富县| 静安区| 万山特区| 宁化县| 从江县| 手机| 武乡县| 南乐县| 醴陵市| 饶平县| 武功县| 安康市| 巫溪县| 聂拉木县| 新竹县| 迁安市| 峨边| 吉木萨尔县| 筠连县| 昭平县| 阿城市| 松阳县| 吴旗县| 沁阳市| 鲁甸县| 绍兴县|