- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
在 Linux 里,有时候需要对文本文件或数据进行排序,sort 命令就是个很趁手的工具。它不仅能按字母序排序,还支持数值、大小写、分隔符、自定义列等各种玩法,直就是排序界的瑞士军刀。
sort 命令有不少参数,先看看常用的几个
短参数 | 长参数 | 说明 |
-n | --number-sort | 按数值排序(整数) |
-g | --general-numeric-sort | 按通用数值排序(支持科学计数法) |
-f | --ignore-case | 忽略大小写 |
-k | --key=POS1[,POS2] | 指定按哪一列排序 |
-t | --field-separator=SEP | 指定列分隔符 |
-r | --reverse | 降序排序(默认是升序) |
-h | --human-numeric-sort | 按人类可读的数字格式排序(如 2K、1G) |
-u | --unique | 去重 |
-o | --output=FILE | 将输出写入文件 |
如果不带任何参数,sort 默认是按字母序来排的。
[root@centos ~]$ cat word.txt
one
two
three
four
[root@centos ~]$ sort word.txt
four
one
three
two
默认情况下,sort 会把所有内容当作字符串,100 可能会排在 20 前面。如果要按数值排序,需要 -n 参数。
[root@centos ~]$ cat num.txt
100
20
3
[root@centos ~]$ sort -n num.txt
3
20
100
有时候我们需要按照某一列的数据排序,比如 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 :按数值排序
· -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
如果想看系统中占用内存最多的进程,可以结合 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 指定按第四列(内存占用)排序,-r 让它按降序排列,head -n 5 取前 5 行。
如果文件里有重复的行,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
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
售前咨询
售后咨询
备案咨询
二维码
TOP