sort 命令用于对文本行进行排序,支持数字排序、字典排序、逆序、按字段排序等。它经常与 uniq、head、tail 等命令配合使用,是数据分析的常用工具。
默认按字典序排序:
sort file.txt
排序并输出到文件:
sort file.txt > sorted.txt
sort -o sorted.txt file.txt
-o 选项可以直接输出到原文件。
| 选项 | 含义 |
|---|---|
-n | 按数字排序 |
-r | 逆序排序 |
-u | 去除重复行 |
-f | 忽略大小写 |
-t | 指定分隔符 |
-k | 指定排序字段 |
-b | 忽略前导空白 |
-s | 稳定排序 |
默认是字典序,数字排序需要 -n:
echo -e "10\n2\n1\n20" | sort
echo -e "10\n2\n1\n20" | sort -n
运行结果:
1
10
2
20
1
2
10
20
字典序下,10 排在 2 前面,因为字符 "1" 比 "2" 小。
-r 逆序:
sort -r file.txt
sort -nr numbers.txt
-k 指定排序字段,-t 指定分隔符:
cat data.txt
内容示例:
张三 85
李四 92
王五 78
按第二列(分数)排序:
sort -k2 -n data.txt
sort -t' ' -k2 -n data.txt
运行结果:
王五 78
张三 85
李四 92
sort -t, -k1,1 -k2,2n data.csv
先按第一字段字典序排序,再按第二字段数字排序。
sort -k2.3,2.5 file.txt
按第2字段的第3到第5个字符排序。
-u 去除重复行:
sort -u file.txt
等同于 sort file.txt | uniq。
-f 忽略大小写:
echo -e "Apple\napple\nBanana\nbanana" | sort -f
-c 检查文件是否已排序:
sort -c file.txt
echo $?
如果已排序返回 0,否则返回 1 并输出第一个乱序的行。
-m 合并已排序的文件:
sort -m sorted1.txt sorted2.txt sorted3.txt
比 cat | sort 更高效,因为不需要重新排序。
cut -d' ' -f 1 access.log | sort | uniq -c | sort -rn | head -10
ls -l | sort -k5 -n
du -sh * | sort -h
-h 选项可以识别人类可读的大小格式(如 1K、2M、3G)。
ls -lt
ls -ltr
sort -u data.txt > unique.txt
sort -t, -k1,1 -k2,2n scores.csv
find . -type f -exec du -b {} + | sort -n | tail -10
排序大文件时,可以调整缓冲区大小:
sort -S 512M largefile.txt
sort --parallel=4 largefile.txt
-S 设置内存缓冲区大小,--parallel 设置并行线程数。
-n 数字排序,-r 逆序,-u 去重-k 指定排序字段,-t 指定分隔符-h 可以识别人类可读的大小格式