做什么

排序文本行。默认按字典序。

常用参数

参数 含义
-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 按拼音排