在linux的只用過程中,總是避免不了排序問題。比如,topn問題。linux提供了sort排序命令,支援常用的排序功能。
sort命令支援很多引數,常用引數如下:
短引數長引數
說明-n
– number-sort
按字串數值排序,與-g區別為不轉為浮點數
-g–general-number-sort
按通用數值排序,支援科學計數法
-f–ignore-case
忽略大小寫,預設大小寫字母不同
-k–key=pos1[,pos2]
排序從pos1開始,若指定pos2,則pos2結束,否則以pos1排序
-t–field-separator=sep
指定列的分割符
-r–reverse
降序排序,預設為公升序
-h–human-numeric-sort
使用易讀性數字(例如: 2k 1g)
-u–unique
去除重複的行
-o–output=file
將輸出寫入檔案
1.預設排序
預設情況下,sort命令,以字母序進行文字排序。如下:
shuanghu@shuanghu:tmp$cat word.txtonetwo
three
four
shuanghu@shuanghu:tmp$sort word.txt
four
onethree
two
2.數字排序
如果想對數字進行排序,可以使用-n引數
shuanghu@shuanghu:tmp$ cat num.txt10020
3shuanghu@shuanghu:tmp$ sort num.txt -n320
100
3.指定列排序
sort排序的時候,可以按欄位分割的資料進行排序。-t引數表示行的分割字元,-k表示第幾列。當然,可以進行降序排序,-r引數可以實現。
下面是對passwd檔案,以冒號(:)進行分割,然後對第三列以數字方式進行降序排序。
shuanghu@shuanghu:etc$ cat passwddaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
shuanghu@shuanghu:etc$ sort -t ':' -k 3 -nr passwd
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
sys:x:3:3:sys:/dev:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
4.資料夾大小排序
在du的時候,加上-h可以使用易讀性數字,比如2k,1g,3m這種。sort也支援-h引數。
比如,du乙個資料夾下的目錄大小後,想以檔案大小進行排序。由於du -h的結果是3k,2m,1g這種,不能簡單的按數字排序。所以,可以使用-h引數。具體如下:
shuanghu@shuanghu:tmp$ du -h2.0g ./test2
4.0k ./test3
316m ./test
2.3g .
shuanghu@shuanghu:tmp$ du -h |sort -hr
2.3g .
2.0g ./test2
316m ./test
4.0k ./test3
5.系統程序記憶體占用排序
檢視系統程序中,記憶體占用最多的前5個程序資訊
shuanghu@shuanghu:tmp$ ps aux|sort -gr -k 4|head -n 5shuanghu 1740 15.7 4.6 1506764 189872 ? sl 5月07 142:08compizroot 1304 2.1 1.9 338928 80208 tty7 ssl+ 5月07 19:29 /usr/bin/x -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
shuanghu 1933 0.0 1.1 1074520 46708 ? sl 5月07 0:00 /usr/lib/evolution/evolution-calendar-factory
shuanghu 1833 0.0 0.8 974900 34468 ? sl 5月07 0:01 nautilus -n
shuanghu 2111 0.0 0.6 655712 24920 ? sl 5月07 0:16 gnome-terminal
6.對檔案內容進行去重
如果檔案內容有很多重複的,需要進行去重。sort也是支援的,可以通過-u引數使用
shuanghu@shuanghu:tmp$cat word.txtonetwo
twothree
three
three
four
four
four
shuanghu@shuanghu:tmp$sort -u word.txt
four
onethree
two
7.將sort輸出內容寫入檔案
在shell中,一般將控制台內容寫入檔案,可以使用重定向,但如果想把sort的排序內容寫回檔案,則不能使用重定向。則需要-o引數。具體如下:
shuanghu@shuanghu:tmp$cat word.txtonetwo
three
four
shuanghu@shuanghu:tmp$sort word.txt >word.txt
shuanghu@shuanghu:tmp$cat word.txt #輸出為空
shuanghu@shuanghu:tmp$sort word.txt -o word.txt
shuanghu@shuanghu:tmp$sort -u word.txt
four
onethree
two
Linux 排序命令sort
很多時候,我們都會去計算一次資料裡頭的相同型態的資料總數,舉例來說,使用 last 可以查得這個月份有登陸主機者的身份。那麼我可以針對每個使用者查出他們的總登陸次數嗎?此時就得要排序與計算之類的命令來輔助了!底下我們介紹幾個好用的排序與統計命令,首先是排序命令sort。root www sort f...
Linux 排序命令sort
很多時候,我們都會去計算一次資料裡頭的相同型態的資料總數,舉例來說,使用 last 可以查得這個月份有登陸主機者的身份。那麼我可以針對每個使用者查出他們的總登陸次數嗎?此時就得要排序與計算之類的命令來輔助了!底下我們介紹幾個好用的排序與統計命令,首先是排序命令sort。root www sort f...
Linux排序命令sort筆記
很多時候linux需要對文字相對比較規範的文字資料進行排序,這時候可以使用linux系統下的sort命令進行處理。語法格式 sort ntkr filename 常用引數 n 根據數字進行排序 t 指定的分隔符 k 指定分隔符的第幾列 r 降序排序 用法示例 a 98 80 100 95 d 88 ...