Linux下的sort排序命令詳解(一)


1 sort的工作原理

sort將文件的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。

[zookeeper@master rh]$ cat seq.txt
banana
apple
pear
orange
pear
[zookeeper@master rh]$ sort seq.txt 
apple
banana
orange
pear
pear

2 sort的-u選項

它的作用很簡單,就是在輸出行中去除重復行。

[zookeeper@master rh]$ sort -u seq.txt 
apple
banana
orange
pear

pear由於重復被-u選項無情的刪除了。

3 sort的-r選項

[zookeeper@master rh]$ cat number.txt
1
3
5
7
11
2
4
6
10
8
9
[zookeeper@master rh]$ sort number.txt  --sort默認的排序方式是升序
1
10
11
2
3
4
5
6
7
8
9
[zookeeper@master rh]$ sort -n number.txt      --排序程序將這些數字按字符來排序了,排序程序會先比較1和2,顯然1小,所以就將10放在2前面
1
2
3
4
5
6
7
8
9
10
11
[zookeeper@master rh]$ sort -n -r number.txt      --r表示降序,n表示按數字進行排序
11
10
9
8
7
6
5
4
3
2
1

4 sort的-o選項

由於sort默認是把結果輸出到標准輸出,所以需要用重定向才能將結果寫入文件,形如sort filename > newfile。

但是,如果你想把排序結果輸出到原文件中,用重定向可就不行了。

[zookeeper@master rh]$ sort -n -r number.txt > number.txt
[zookeeper@master rh]$ cat number.txt 
[zookeeper@master rh]$ 

number清空了。所以我們需要使用-o選項,它成功的解決了這個問題,讓你放心的將結果寫入原文件。這或許也是-o比重定向的唯一優勢所在。

[zookeeper@master rh]$ sort -n -r number.txt -o number.txt
[zookeeper@master rh]$ cat number.txt 
11
10
9
8
7
6
5
4
3
2
1

5 sort的-t選項和-k選項

[zookeeper@master rh]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
[zookeeper@master rh]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

這個文件有三列,列與列之間用冒號隔開了,第一列表示水果類型,第二列表示水果數量,第三列表示水果價格。那么我想以水果數量來排序,也就是以第二列來排序,如何利用sort實現?幸好,sort提供了-t選項,后面可以設定間隔符。(是不是想起了cut和paste的-d選項,共鳴~~)

指定了間隔符之后,就可以用-k來指定列數了。我們使用冒號作為間隔符,並針對第二列來進行數值升序排序,結果很令人滿意。

6 其他的sort常用選項

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

-c會檢查文件是否已排好序,如果亂序,則輸出第一個亂序的行的相關信息,最后返回1

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM