linux sort 源码_Linux: 史上最全的sort命令案例,打包带走吧
一、 介紹
sort命令是用來對文字內容(文檔)排序使用的。同時也可以排序去重、指定字段排序,按照月份排序、按照數字排序,檢查文件是否有序等等。默認情況是按照字典序排序以后標準輸出到屏幕上,但是該命令不會修改原來的文檔內容。sort命令通常和uniq命令以及wc命令一起使用。
二、 用法
sort [OPTION]... [FILE]...
選項解釋:-b 忽略開頭空格(空白),默認-f 將所有小寫字母轉換為大寫字母排序-g 數字類型排序,效果同 -n-n 字符串數字按照數字排序, 效果同-g-h 以人類可以閱讀(理解)的形式排序-c 檢查是否排序完成-m 合并兩個 文件排序-r 降序(逆序)-o 將排序以后的內容保存文件-k 找到指定的列排序,下標從1開始-u 排序以后去除重復行-t 默認情況下的分隔符為空白符(空格、制表符等),使用-t可以自定義指定分隔符-M 按照月份排序
三、 案例
3.0 默認排序
假如month.txt 文件內容如下:
[root@dongjing sort]# cat month.txtJunAprSepJulAug
默認排序(不加任何的選項)[root@dongjing sort]# sort month.txtAprAugJulJunSep
默認按照字典序排列
3.1 按照月份排序
[root@dongjing sort]# sort -M month.txtAprJunJulAugSep
默認排序只是按照字典序排序,但是對于月份來說并不能符合我們的要求,所以我們使用 -M 按照月份排序
3.2 按照人類閱讀排序
假如我們有一個size.txt文件內容如下,我們排序以后可以得到按照大小排序[root@dongjing sort]# cat size.txt2G30K9M300B30K22M
排序
[root@dongjing sort]# sort -h size.txt300B30K30K9M22M2G
3.3 排序去重
通過3.2我們看到size.txt文件中30K這個有重復,我們能不能排序的時候就把重復行進行去重呢。可以通過 -u 選項來完成。[root@dongjing sort]# sort -hu size.txt300B30K9M22M2G
注意: 這里-h 一定要加的,保證按照數字排序。
3.4 倒序(翻轉排序)
我們要將size.txt按照從大到小的順序排序,怎么實現呢?可以使用-r 翻轉原來排序的順序,原先是從小到大,翻轉以后就是從大到小了呢。
[root@dongjing sort]# sort -hr size.txt2G22M9M30K30K300B
3.5 保存排序以后的內容到文件中
將size.txt排序以后的結果保存的size_sorted.txt 文件中。
保存成文件我們可以使用 > 來完成,也可以使用-o 選項后面跟文件名來完成。
一、 使用> 完成保存sort -h size.txt > size_sorted.txt
二、 使用-o 選項完成
[root@dongjing sort]# sort -h -o size_sorted.txt size.txt
注意: 運行完命令不會在屏幕上輸出結果。而是直接保存到文件中了。[root@dongjing sort]# ll | grep size-rw-r--r-- 1 root root 23 Sep 16 10:34 size_sorted.txt-rw-r--r-- 1 root root 23 Sep 16 10:23 size.txt
3.6 數字排序
假設我們有一個名為number的文件,內容如下:
[root@dongjing sort]# cat number.txt22111110980
通過3.1我們已經知道sort默認是按照字典序排序,那么這里先試用sort排序看一下結果:[root@dongjing sort]# sort number.txt09111112280
沒有達到我們預期的效果,我們想要的是按照數字大小進行排序。這里可以使用-n 或者 -g 都可以。
[root@dongjing sort]# sort -n number.txt09112280111[root@dongjing sort]#[root@dongjing sort]# sort -g number.txt09112280111
3.7 檢查是否有序
判斷是否有序可以使用-c 選項實現[root@dongjing sort]# sort -c number.txtsort: number.txt:2: disorder: 11 # 這里說明第一行的11不是有序的
先排序在檢查以后,發現沒有給出提示,表示已經有序。
[root@dongjing sort]# sort number.txt | sort -c[root@dongjing sort]#
3.8 按照指定列(字段)排序
-k 按照指定的列排序,默認情況下每行按照空白符(空格、制表符等)來分隔列,列的下標從1開始
假如我們有一個score.txt的文件內容如下(每行字段之間使用空格分隔), 每隔字段分別代表: 名稱 科目 成績[root@dongjing sort]# cat score.txtTom Scala 30Tom Scala 30Tom Java 30aJack Python 95bJack Python 95Jack Spring 95Mike Java 95Linda Linux 85Linda PHP 66Linda Linux 85XY PHP 100XY Java 55Mike Scala 9SS Shell 99
需求:現在我們需要按照成績由高分到低分排序(結果中不能出現重復行) -- 本題目不關心科目。
[root@dongjing sort]# sort -u score.txt | sort -k3,3nrXY PHP 100SS Shell 99aJack Python 95bJack Python 95Jack Spring 95Mike Java 95Linda Linux 85Linda PHP 66XY Java 55Tom Java 30Tom Scala 30Mike Scala 9
注意: 我們如果只需要按照第三行排序建議寫成 -k3,3,而不要寫成 -k3 。因為-k3,3表示從第三列開始到第三列 結束,所以只包括第三列排序。 而-k3表示從第三列開始一直到最后一列排序。 當然在本案例中寫-k3,3 和 -k3結果都是一樣的。
3.9 指定分隔符排序
默認情況下的分隔符為空白符(空格、制表符等),使用-t 可以自定義指定分隔符。
假如我們有一個score.txt的文件內容如下(每行字段之間使用逗號分隔), 每隔字段分別代表: 名稱 科目 成績[root@dongjing sort]# cat score.txtTom,Scala,30Tom,Scala,30Tom,Java,30aJack,Python,95bJack,Python,95Jack,Spring,95Mike,Java,95Linda,Linux,85Linda,PHP,66Linda,Linux,85XY,PHP,100XY,Java,55Mike,Scala,9SS,Shell,99
需求:將每科成績按照從高分到低分排序,如果分數、科目都相同的話,按照名字降序排列。(最后結果不能包含重復行)
[root@dongjing sort]# sort -u score.txt | sort -t ',' -k2,2 -k3,3nr -k1,1rMike,Java,95XY,Java,55Tom,Java,30Linda,Linux,85XY,PHP,100Linda,PHP,66bJack,Python,95aJack,Python,95Tom,Scala,30Mike,Scala,9SS,Shell,99Jack,Spring,95
3.10 忽略頭空格、忽略大小寫排序
-b : 忽略頭部空格 (默認)
-f : 將所有小寫字母轉換為大寫字母比較
假如有一個test.txt的文件,內容如下:[root@dongjing sort]# cat test.txtcomputermouseLAPTOP dataRedHat laptopdebianlaptop
需求1:忽略開頭空白排序
[root@dongjing sort]# sort -b test.txtcomputer datadebianlaptop laptopLAPTOPmouseRedHat[root@dongjing sort]# sort test.txtcomputer datadebianlaptop laptopLAPTOPmouseRedHat
可以觀察到不加-b 和加上結果是一樣的。
需求2: 忽略大小寫排序[root@dongjing sort]# sort -f test.txt laptop datacomputerdebianLAPTOPlaptopmouseRedHat
可以觀察到:①開頭帶有空白的排序到最前面了,這是因為 -f 會將每行所有的字符轉換為大寫,而空白的大寫還是其本身,所以在排序的時候就排到前面了 ② 觀察LAPTOP和laptop的位置可以看到我們忽略大小寫已經有成效。
注意: 使用-f 會打破默認忽略頭空白排序的效果。
總結
以上是生活随笔為你收集整理的linux sort 源码_Linux: 史上最全的sort命令案例,打包带走吧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光耦p621引脚图_开关电源中光耦电路的
- 下一篇: angularjs 滑块验证码 移动端_