Linux sort命令

pursuer.chen發表於2016-05-23

介紹

sort命令是一個文字排序命令,它能對標準輸入和文字檔案進行排序,並且能將結果通過stdout輸出,sort命令經常會同uniq命令一起使用。sort命令的排序原理預設是從每一行的第一個字元開始對比直到行的最後一個字元結束(比如第一個字元相同就對比第二個字元),比較方式一般是數字比較,字母的順序比較。

 

引數:

-b:忽略每行前面開始出的空格字元; 
-c:檢查檔案是否已經按照順序排序; 
-d:排序時,處理英文字母、數字及空格字元外,忽略其他的字元; 
-f:排序時,將小寫字母視為大寫字母; 
-i:排序時,除了040至176之間的ASCII字元外,忽略其他的字元; 
-m:將多個輸入結果或者檔案的內容進行合併,不對合並後的結果再進行排序; 
-M:按月份進行排序; 
-n:以數字進行排序; 
-o<輸出檔案>:將排序後的結果存入制定的檔案; 
-r:以倒序的順序來排序; 
-t<分隔字元>:指定排序時列分隔字元,預設是使用空格做為分隔符;
-k:指定對比列或開始位置和結束位置

測試資料

[root@localhost test]# cat test
1:jan:b
2:jan:a
2:feb:b
3:mar:c
5:may:d
4:apr:e

1.預設排序

[root@localhost test]# sort test;
1:jan:b
2:feb:b
2:jan:a
3:mar:c
4:apr:e
5:may:d

預設是從第一個字元開始做對比每行,從上圖的對比可以看到當第一個字元2相同的時,開始對比接下來的字元對比到第三個字元f是排在j的前面

2.倒序排序,-r

[root@localhost test]# sort -r test 
5:may:d
4:apr:e
3:mar:c
2:jan:a
2:feb:b
1:jan:b

3.按月份進行排序

[root@localhost test]# sort -Mk 2 -t: test;
1:jan:b
2:jan:a
2:feb:b
3:mar:c
4:apr:e
5:may:d

-M:指定是根據月份進行對比,-k:指定對比的列是第二列,這裡的-k引數比較特殊因為是和-M一起使用後明確了只對比第二列(類似使用 -k 2,2),如果第二列相同再從開始處進行對比,如果不是明確指定了對比的字元預設是從指定的字元開始對比到該行的結束。

注意:當對比的內容中分隔符不是預設的空格時,需要明確指定-t引數指定分隔符

 4.-k引數

 -k引數比較複雜,引數用來指定對比的開始和結束字元

-k start[.start1][,end[.end1]]

中括號裡面的可以省略,

1.如果只指定了start:代表從第start列的第一個字元開始比較到該行的結尾

2.如果指定了start,end:代表從start列的一個字元開始到end列的最後一個字元結束,如果從start開始到end結束對比的記錄完全相同則重新從行的開始處再開始匹配。

3.如果指定了start.start1:代表從start列的第start1個字元開始對比

[root@localhost test]# sort -k 2 -t: test;
4:apr:e
2:feb:b
2:jan:a
1:jan:b
3:mar:c
5:may:d

注意:由於只指定了start,所以從第二列的第一個字元開始對比直到行的結束,注意觀察jan兩列。

[root@localhost test]# sort -k 2,2 -t: test;
4:apr:e
2:feb:b
1:jan:b
2:jan:a
3:mar:c
5:may:d

注意:由於沒有指定.start1和.end1所以先對比第2列,當第二列相同的情況下從行的開始再進行對比,注意觀察jan兩列。

[root@localhost test]# sort -k 2.2,2.3 -t: test;
1:jan:b
2:jan:a
3:mar:c
5:may:d
2:feb:b
4:apr:e

注意1,2兩行,由於ja相同所以從行的開始處再進行對比,而不是從行的後面再進行對比,注意觀察jan兩列。

總結

 

 

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章