sort 命令详解:文本排序与数据整理的实用工具
sort 是 Linux 系统中用于对文本内容进行排序的核心命令,它以行为单位对输入数据进行排序,并支持按列、数值、月份等多种方式排序,是处理日志、表格数据、配置文件等的重要工具。本文将详细讲解 sort 命令的选项、用法及实战案例。
sort 基本用法与排序规则
基本语法
1 | sort [选项] [文件...] |
- 若不指定文件,
sort从标准输入(管道或键盘)读取数据。 - 默认排序规则:按字符的 ASCII 码值从小到大排序(字典序)。
基础示例
1 | # 示例文件:nums.txt |
核心选项详解
排序方式控制
-n:按数值大小排序
默认排序按字符 ASCII 码,-n 选项强制按数值大小排序(支持整数和浮点数)。
示例:
1 | # 示例文件:mixed.txt |
-r:反向排序(降序)
-r 选项使排序结果按降序排列(配合 -n 可实现数值降序)。
示例:
1 | # 数值降序排序 |
-k:按指定列排序
-k 选项用于按文本中的 “列” 排序(默认以空格或制表符为分隔符),格式:-k 列号 或 {-k 起始列,结束列}。
示例:
1 | # 示例文件:users.txt(格式:姓名 年龄 性别) |
-t:指定列分隔符
默认以空格或制表符分隔列,-t 选项可自定义分隔符(如逗号、冒号)。
示例:
1 | # 示例文件:scores.csv(格式:姓名,语文,数学,逗号分隔) |
其他实用选项
-u:去重并排序
-u 选项会在排序后去除重复行(仅保留第一行)。
示例:
1 | # 示例文件:duplicates.txt |
-o:将结果写入文件
-o 选项用于将排序结果直接写入指定文件(替代 > 重定向)。
示例:
1 | # 排序后写入 sorted.txt |
-c:检查文件是否已排序
-c 选项用于检查文件是否按指定规则排序,若未排序则输出第一个无序行。
示例:
1 | # 检查 numbers.txt 是否按数值升序排序 |
-M:按月份排序
-M 选项支持按月份缩写(Jan、Feb…Dec)排序。
示例:
1 | # 示例文件:months.txt |
复合排序:多选项组合使用
实际场景中常需组合多个选项实现复杂排序,例如 “先按某列降序,再按另一列升序”。
示例 1:多列排序
1 | # 对 /etc/passwd 按 UID(第3列)升序,相同 UID 再按 GID(第4列)升序 |
示例 2:去重 + 数值排序
1 | # 对日志中出现的 IP 按访问次数(第2列)降序,并去重 |
示例 3:按列范围排序
1 | # 按第2列从第2个字符开始的部分排序(如提取年份排序) |
常见误区与注意事项
- 数值排序必须加
-n:
若不加-n,sort会按字符排序(如100小于20,因1的 ASCII 码小于2)。 - 列号从 1 开始:
-k 1表示第 1 列,而非第 0 列,与数组下标不同。 - 分隔符的影响:
连续空格会被视为一个分隔符,但自定义分隔符(-t)时需确保一致性(如 CSV 文件中不能有多余逗号)。 - 大文件排序:
sort会自动处理大文件(使用临时文件),但可通过-S选项指定内存使用量(如-S 1G表示使用 1GB 内存)。
v1.3.10