歡迎來(lái)到藍(lán)隊(duì)云技術(shù)小課堂,每天分享一個(gè)技術(shù)小知識(shí)。
在 Linux 里,有時(shí)候需要對(duì)文本文件或數(shù)據(jù)進(jìn)行排序,sort 命令就是個(gè)很趁手的工具。它不僅能按字母序排序,還支持?jǐn)?shù)值、大小寫、分隔符、自定義列等各種玩法,直就是排序界的瑞士軍刀。
sort 的常用參數(shù)
sort 命令有不少參數(shù),先看看常用的幾個(gè)
短參數(shù) | 長(zhǎng)參數(shù) | 說明 |
-n | --number-sort | 按數(shù)值排序(整數(shù)) |
-g | --general-numeric-sort | 按通用數(shù)值排序(支持科學(xué)計(jì)數(shù)法) |
-f | --ignore-case | 忽略大小寫 |
-k | --key=POS1[,POS2] | 指定按哪一列排序 |
-t | --field-separator=SEP | 指定列分隔符 |
-r | --reverse | 降序排序(默認(rèn)是升序) |
-h | --human-numeric-sort | 按人類可讀的數(shù)字格式排序(如 2K、1G) |
-u | --unique | 去重 |
-o | --output=FILE | 將輸出寫入文件 |
sort 命令實(shí)戰(zhàn)
1. 默認(rèn)排序(按字母序)
如果不帶任何參數(shù),sort 默認(rèn)是按字母序來(lái)排的。
[root@centos ~]$ cat word.txt
one
two
three
four
[root@centos ~]$ sort word.txt
four
one
three
two
2. 數(shù)字排序(按數(shù)值大?。?/span>
默認(rèn)情況下,sort 會(huì)把所有內(nèi)容當(dāng)作字符串,100 可能會(huì)排在 20 前面。如果要按數(shù)值排序,需要 -n 參數(shù)。
[root@centos ~]$ cat num.txt
100
20
3
[root@centos ~]$ sort -n num.txt
3
20
100
3. 按某一列排序
有時(shí)候我們需要按照某一列的數(shù)據(jù)排序,比如 passwd 文件,它用 : 分隔多個(gè)字段,我們想按第三列(UID)排序:
[root@centos ~]$ 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/nologinsync: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
[root@centos ~]$ 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/nologinsync: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
解釋一下:
· -t ':' :指定 : 作為分隔符
· -k 3 :按第三列排序
· -n :按數(shù)值排序
· -r :降序
4. 文件夾大小排序
du -h 可以顯示文件夾大小,比如 2K、1G 這樣的格式。如果想按大小排序,就得用 -h 選項(xiàng):
[root@centos ~]$ du -h
2.0G ./test2
4.0K ./test3
316M ./test1
3.3G .
[root@centos ~]$ du -h | sort -hr
3.3G .
2.0G ./test2
316M ./test1
4.0K ./test3
5. 進(jìn)程內(nèi)存占用排序
如果想看系統(tǒng)中占用內(nèi)存最多的進(jìn)程,可以結(jié)合 ps 和 sort:
[root@centos ~]$ 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
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
這里的 -k 4 指定按第四列(內(nèi)存占用)排序,-r 讓它按降序排列,head -n 5 取前 5 行。
6. 去重
如果文件里有重復(fù)的行,sort -u 直接幫你去掉:
[root@centos ~]$ cat word.txt
one
two
two
three
three
three
four
four
four
[root@centos ~]$ sort -u word.txt
four
one
three
two
7. 把排序結(jié)果寫回文件
平時(shí)我們重定向 > 輸出到文件,但 sort 不能直接用 sort file.txt > file.txt,這樣文件會(huì)被清空。要用 -o:
[root@centos ~]$ sort word.txt -o word.txt
藍(lán)隊(duì)云官網(wǎng)上擁有完善的技術(shù)支持庫(kù)可供參考,大家可自行查閱,更多技術(shù)問題,可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。
更多技術(shù)知識(shí),藍(lán)隊(duì)云期待與你一起探索。