Skip to main content

Linux 核心命令

文件查看编辑命令 sort

sort 命令是 Linux 中一个超级实用的工具,用来对文本行进行排序。无论是按字母顺序、数字大小,还是更复杂的条件,sort 都能帮你搞定。

本节会从基础用法到高级功能逐步讲解。

1. 基本用法:简单排序

sort 最简单的用法是直接对文件内容按字母顺序排序。比如你有个文件 fruits.txt

apple
banana
cherry

运行以下命令:

sort fruits.txt

输出会是:

apple
banana
cherry

默认情况下,sort 按字母顺序(ASCII 顺序)从小到大排序,输出到终端。如果想把结果保存到新文件,可以用重定向:

sort fruits.txt > sorted_fruits.txt

2. 按逆序排序

想从大到小排序?加个 -r(reverse)选项就行:

sort -r fruits.txt

输出:

cherry
banana
apple

-r 会把排序结果反过来,适用于任何排序场景。

3. 按数字排序

如果文件里是数字,比如 numbers.txt

10
2
100

直接用 sort 会按字母顺序排,结果可能是:

10
100
2

这是因为 sort 默认按字符排序。要按数值大小排序,加 -n(numeric-sort):

sort -n numbers.txt

输出:

2
10
100

结合 -r,可以从大到小排:

sort -n -r numbers.txt

输出:

100
10
2

4. 去重:只保留唯一行

如果文件有重复行,可以用 -u(unique)去掉重复内容。比如 fruits.txt

apple
banana
apple
cherry

运行:

sort -u fruits.txt

输出:

apple
banana
cherry

-u 会排序后只保留每行内容的唯一版本,重复行直接丢掉。

5. 按特定列排序

很多时候,文件内容是按列组织的,比如 scores.txt

Alice 90
Bob 85
Charlie 95

想按成绩(第2列)排序?用 -k 指定列号:

sort -k2 -n scores.txt

输出:

Bob 85
Alice 90
Charlie 95

-k2 表示按第2列排序,-n 确保按数字排序。列号从 1 开始,字段默认用空格或制表符分隔。如果分隔符不是空格(比如用冒号),可以用 -t 指定:

sort -t':' -k2 -n scores.txt

比如文件是:

Alice:90
Bob:85
Charlie:95

结果一样按第2列数字排序。

6. 按多个字段排序

可以同时按多列排序,优先级从左到右。比如 data.txt

Alice 90 Math
Bob 90 English
Charlie 85 Math

想先按成绩(第2列)降序,再按科目(第3列)升序:

sort -k2nr -k3 data.txt

输出:

Alice 90 Math
Bob 90 English
Charlie 85 Math

-k2nr 表示第2列按数字降序,-k3 表示第3列按字母升序。注意 -k 的格式是 -k[字段号][选项],像 nr 可以直接接在字段号后。

7. 忽略大小写

默认情况下,sort 区分大小写,Apple 排在 apple 之前。想忽略大小写?用 -f(fold-case):

sort -f fruits.txt

比如:

Apple
banana
apple

输出:

Apple
apple
banana

-f 会把大写字母当小写处理,排序更符合直觉。

8. 按月份排序

如果文件里有月份名,比如 months.txt

January
March
April

-M(month-sort)按月份顺序排:

sort -M months.txt

输出:

January
March
April

-M 认得英文月份名(全称或缩写),按日历顺序排序。

9. 按随机顺序

想打乱顺序?用 -R(random-sort):

sort -R fruits.txt

输出可能是:

banana
apple
cherry

每次运行结果都不同,适合随机化数据。

10. 按字典序排序

默认排序是按 ASCII 码,空格、符号都算。如果只想按字母和数字排序,忽略符号,用 -d(dictionary-order):

sort -d data.txt

比如:

apple!
banana
apple.

输出:

apple!
apple.
banana

-d 只考虑字母、数字和空格,忽略标点。

11. 处理空行和重复空白

sort 默认把空行排在最前面。如果想把空行放最后,可以结合其他工具处理,或者确保文件没空行。重复空白(多个空格或制表符)会自动合并为一个分隔符。如果不想合并,用 -b(ignore-leading-blanks)保留行首空白:

sort -b data.txt

比如:

  apple
banana

输出:

  apple
banana

-b 忽略行首空白对排序的影响。

12. 合并多个已排序文件

如果有多个已排序的文件,可以用 -m(merge)合并,不重新排序:

sort -m file1.txt file2.txt

file1.txtfile2.txt 必须已经排序好,-m 高效合并,保持整体顺序。

13. 检查文件是否已排序

想确认文件是否已排序?用 --check

sort --check sorted_file.txt

如果文件已排序,没输出;否则会提示哪行乱序。可以用 -c 代替 --check

14. 自定义分隔符

前面提过 -t 可以指定分隔符,比如 CSV 文件 data.csv

Alice,90
Bob,85
Charlie,95

按第2列数字排序:

sort -t',' -k2 -n data.csv

输出:

Bob,85
Alice,90
Charlie,95

-t',' 指定逗号为分隔符,-k2 按第2列排序。

15. 处理大量数据

sort 默认把整个文件读入内存。对于超大文件,可以用 --buffer-size=SIZE 控制内存使用,比如:

sort --buffer-size=100M bigfile.txt

SIZE 可以是 100M(100MB)或 1G 等。还可以用 --parallel=N 设置并行线程数:

sort --parallel=4 bigfile.txt

提高大文件排序效率。

16. 输出到终端并保存

可以用 tee 命令同时输出到终端和文件:

sort fruits.txt | tee sorted_fruits.txt

这样既看到结果,又保存到 sorted_fruits.txt

17. 结合其他命令

sort 常跟其他命令配合。比如统计单词出现次数:

cat words.txt | sort | uniq -c

words.txt

apple
banana
apple

输出:

      2 apple
      1 banana