文件查看编辑命令 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[字段号][选项]
,像 n
或 r
可以直接接在字段号后。
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.txt
和 file2.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