- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
歡迎來到藍隊云技術(shù)小課堂,每天分享一個技術(shù)小知識。
在 Linux 里,有時候需要對文本文件或數(shù)據(jù)進行排序,sort 命令就是個很趁手的工具。它不僅能按字母序排序,還支持數(shù)值、大小寫、分隔符、自定義列等各種玩法,直就是排序界的瑞士軍刀。
sort 命令有不少參數(shù),先看看常用的幾個
短參數(shù) | 長參數(shù) | 說明 |
-n | --number-sort | 按數(shù)值排序(整數(shù)) |
-g | --general-numeric-sort | 按通用數(shù)值排序(支持科學計數(shù)法) |
-f | --ignore-case | 忽略大小寫 |
-k | --key=POS1[,POS2] | 指定按哪一列排序 |
-t | --field-separator=SEP | 指定列分隔符 |
-r | --reverse | 降序排序(默認是升序) |
-h | --human-numeric-sort | 按人類可讀的數(shù)字格式排序(如 2K、1G) |
-u | --unique | 去重 |
-o | --output=FILE | 將輸出寫入文件 |
如果不帶任何參數(shù),sort 默認是按字母序來排的。
[root@centos ~]$ cat word.txt
one
two
three
four
[root@centos ~]$ sort word.txt
four
one
three
two
默認情況下,sort 會把所有內(nèi)容當作字符串,100 可能會排在 20 前面。如果要按數(shù)值排序,需要 -n 參數(shù)。
[root@centos ~]$ cat num.txt
100
20
3
[root@centos ~]$ sort -n num.txt
3
20
100
有時候我們需要按照某一列的數(shù)據(jù)排序,比如 passwd 文件,它用 : 分隔多個字段,我們想按第三列(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 :降序
du -h 可以顯示文件夾大小,比如 2K、1G 這樣的格式。如果想按大小排序,就得用 -h 選項:
[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
如果想看系統(tǒng)中占用內(nèi)存最多的進程,可以結(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 行。
如果文件里有重復(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
平時我們重定向 > 輸出到文件,但 sort 不能直接用 sort file.txt > file.txt,這樣文件會被清空。要用 -o:
[root@centos ~]$ sort word.txt -o word.txt
藍隊云官網(wǎng)上擁有完善的技術(shù)支持庫可供參考,大家可自行查閱,更多技術(shù)問題,可以直接咨詢。同時,藍隊云整理了運維必備的工具包免費分享給大家使用,需要的朋友可以直接咨詢。
提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!
這條文檔是否有幫助解決問題?
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP