在linux的只用過程中,總是避免不了排序問題。比如,topN問題。linux提供了sort排序命令,支持常用的排序功能。
sort命令支持很多參數,常用參數如下:
1.默認排序
默認情況下,sort命令,以字母序進行文本排序。如下:
#cat word.txt
one
two
three
four
sort word.txt
four
one
three
two
2.數字排序
如果想對數字進行排序,可以使用-n參數
shuanghu@shuanghu:tmp$ cat num.txt
100
20
3
shuanghu@shuanghu:tmp$ sort num.txt -n
3
20
100
3.指定列排序
sort排序的時候,可以按字段分割的數據進行排序。-t參數表示行的分割字符,-k表示第幾列。當然,可以進行降序排序,-r參數可以實現。
下面是對passwd文件,以冒號(:)進行分割,然後對第三列以數字方式進行降序排序。
shuanghu@shuanghu:etc$ cat passwd
daemon: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 -h
2.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 5
shuanghu 1740 15.7 4.6 1506764 189872 ? Sl 5月07 142:08 compiz
root 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