做什么
排序文本行。默认按字典序。
常用参数
| 参数 | 含义 |
|---|---|
-n |
按数字 |
-r |
倒序 |
-k N |
按第 N 列 |
-t 'X' |
用 X 作列分隔符 |
-u |
去重(重复行只留一份) |
-h |
按人类大小(1K 2M 3G 等) |
-V |
版本号排序(1.10 > 1.9) |
-R |
随机 |
-f |
忽略大小写 |
-c |
检查是否已排序 |
-o file |
输出到文件(可以 = 输入) |
实战
sort file.txt # 字典序
sort -n nums.txt # 数字序
sort -nr nums.txt # 数字倒序
sort -u file.txt # 排序 + 去重
sort -h sizes.txt # 按 K/M/G 排
sort -V versions.txt # 版本号
# 按第 N 列排
sort -k2 file.txt # 按第 2 列字典
sort -k2 -n file.txt # 第 2 列数字
sort -t: -k3 -n /etc/passwd # /etc/passwd 第 3 列(UID)数字排
# 倒序看大文件
sort -nr -k5 file.txt | head -10 # 第 5 列最大 10 个
# 多键排序
sort -k1,1 -k2n file.txt # 先按第 1 列字典,再按第 2 列数字
实战 2:组合
# IP 频次 top 10
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# 看 du 输出按大小排
du -sh * | sort -h
# 字典排序软件包名
dpkg -l | awk '{print $2}' | sort
sort -u vs uniq
sort file | uniq # 等同 sort -u(但 sort -u 一步搞定)
只有要计数时才必须用 uniq(uniq -c)。
坑
- 默认按字符序——数字 "10" 排在 "2" 之前。数字必须 -n
- 大文件排序占内存——可以
-T /tmp指定临时目录,或--parallel=N多核 - 中文按 unicode 字节排——
LC_ALL=zh_CN.UTF-8 sort按拼音排