sort命令基础
作用:对文本文件的行按字典序(默认)或指定规则排序。
基本语法:
sort [选项] 文件名
示例文件data.txt:
apple
Orange
Banana
12
3
基础排序:
sort data.txt
输出:
12
3
Banana
Orange
apple
注意:默认按ASCII值排序(数字→大写字母→小写字母)。
常用排序选项详解
按数值排序(解决数字排序问题)
sort -n data.txt
输出:
3
12
Banana
Orange
apple
适用场景:日志中的行号、年龄等数值数据。
逆序排序(从大到小)
sort -r data.txt # 字典序逆序 sort -nr data.txt # 数值逆序
去重(删除重复行)
sort -u data.txt
等同于
sort data.txt | uniq
,但更高效。
按列排序(关键字段排序)
文件users.txt:
John 25
Alice 30
Bob 22
sort -k2 -n users.txt # 按第2列(年龄)数值排序
输出:
Bob 22
John 25
Alice 30
说明:
-k2
指定第2列为排序键,-n
确保按数值处理。
忽略大小写
sort -f data.txt
输出:
12
3
apple
Banana
Orange
apple"和"Apple"会被视为相同。
指定字段分隔符
sort -t':' -k3 -n /etc/passwd # 按冒号分隔的第3列(用户ID)排序
高级应用场景
多级排序(主键+次键)
文件scores.txt
:
Alice Math 90
Bob History 85
Alice History 88
sort -k1,1 -k3nr scores.txt # 先按名字,再按分数逆序
输出:
Alice Math 90
Alice History 88
Bob History 85
合并已排序文件
sort -m sorted1.txt sorted2.txt # 合并两个已排序文件
检查文件是否已排序
sort -c data.txt # 若未排序,输出错误位置
注意事项与常见问题
-
区域设置影响排序
使用LC_ALL=C
强制按ASCII排序,避免语言环境干扰:LC_ALL=C sort data.txt
-
处理大文件
添加-S 50%
可分配50%内存作为缓冲区(需GNU sort):sort -S 50% largefile.txt
-
GNU sort与BSD sort差异
- macOS(BSD)不支持
-S
(内存分配),需安装GNU coreutils:brew install coreutils # 安装后使用gsort
- macOS(BSD)不支持
sort
命令是Linux文本处理的基石,通过灵活组合选项(如-n
、-k
、-t
)可应对复杂排序需求,关键要点:
- 数值排序必用
-n
,避免字典序错误。 - 按列排序依赖
-k
和-t
指定字段和分隔符。 - 生产环境中注意区域设置和内存管理。
引用说明: 参考 GNU coreutils手册、Linux man-pages项目 及 POSIX 标准文档,确保技术准确性,实践命令前建议通过
man sort
查看本地手册。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7814.html