1. 命令概述
- 命令名称:
sort(英文全拼:sort) - 核心功能:对文本文件的行进行排序
- 主要用途:数据排序、去重、合并、统计
- 特点:支持多种排序方式、去重、合并、统计
2. 语法格式
sort [选项] [文件...]
3. 常用选项
| 选项 | 说明 |
|---|---|
-b | 忽略每行前面的空格 |
-d | 按字典顺序排序 |
-f | 忽略大小写 |
-i | 只考虑可打印字符 |
-M | 按月份排序 |
-n | 按数值大小排序 |
-r | 反向排序 |
-u | 去重,只显示唯一的行 |
-t 字符 | 指定字段分隔符 |
-k 字段 | 按指定字段排序 |
-o 文件 | 将结果输出到指定文件 |
-c | 检查文件是否已排序 |
-m | 合并已排序的文件 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
4. 基本操作
(1) 基本排序
# 按字典顺序排序
sort file.txt
# 按数值大小排序
sort -n file.txt
# 反向排序
sort -r file.txt
# 忽略大小写排序
sort -f file.txt
# 去重排序
sort -u file.txt
(2) 指定字段排序
# 按第2个字段排序
sort -k 2 file.txt
# 按第2个字段数值排序
sort -n -k 2 file.txt
# 按第2个字段反向排序
sort -r -k 2 file.txt
# 按第2个字段去重排序
sort -u -k 2 file.txt
(3) 指定分隔符
# 按逗号分隔符排序
sort -t, file.csv
# 按冒号分隔符排序
sort -t: file.txt
# 按制表符分隔符排序
sort -t $'\t' file.txt
# 按空格分隔符排序(默认)
sort file.txt
(4) 复杂字段排序
# 按第2个字段数值排序,第1个字段字典排序
sort -k 2n -k 1 file.txt
# 按第2个字段数值反向排序,第1个字段字典排序
sort -k 2nr -k 1 file.txt
# 按第2个字段的第3到第5个字符排序
sort -k 2.3,2.5 file.txt
# 按第2个字段到行尾排序
sort -k 2 file.txt
# 按第2个字段到第4个字段排序
sort -k 2,4 file.txt
5. 常用实例详解
(1) 数值排序
# 按数值大小排序
sort -n numbers.txt
# 按数值大小反向排序
sort -nr numbers.txt
# 按第2列数值排序
sort -n -k 2 data.txt
# 按第2列数值反向排序
sort -nr -k 2 data.txt
# 按第2列数值排序,第1列字典排序
sort -n -k 2 -k 1 data.txt
(2) 去重排序
# 去重排序
sort -u file.txt
# 按第2列去重排序
sort -u -k 2 file.txt
# 按第2列数值去重排序
sort -n -u -k 2 file.txt
# 去重并统计出现次数
sort file.txt | uniq -c
# 去重并按出现次数排序
sort file.txt | uniq -c | sort -nr
(3) 合并排序
# 合并两个已排序的文件
sort -m file1.txt file2.txt
# 合并多个已排序的文件
sort -m file1.txt file2.txt file3.txt
# 合并并去重
sort -m -u file1.txt file2.txt
# 合并并按数值排序
sort -m -n file1.txt file2.txt
(4) 检查排序
# 检查文件是否已排序
sort -c file.txt
# 检查并按数值排序
sort -c -n file.txt
# 检查并按第2列排序
sort -c -k 2 file.txt
# 检查并按第2列数值排序
sort -c -n -k 2 file.txt
(5) 输出到文件
# 排序并输出到新文件
sort file.txt -o sorted.txt
# 排序并覆盖原文件
sort file.txt -o file.txt
# 排序并输出到多个文件
sort file1.txt file2.txt -o sorted.txt
# 排序并输出到标准输出
sort file.txt | tee sorted.txt
6. 实际应用场景
场景一:数据排序
# 排序用户列表
sort /etc/passwd
# 按用户名排序
sort -t: -k 1 /etc/passwd
# 按用户ID排序
sort -t: -n -k 3 /etc/passwd
# 按组ID排序
sort -t: -n -k 4 /etc/passwd
# 按登录shell排序
sort -t: -k 7 /etc/passwd
场景二:日志分析
# 按时间排序日志
sort access.log
# 按IP地址排序
sort -t ' ' -k 1 access.log
# 按状态码排序
sort -t ' ' -n -k 9 access.log
# 按响应时间排序
sort -t ' ' -n -k 10 access.log
# 按访问量排序
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr
场景三:配置文件处理
# 排序配置文件
sort config.conf
# 按配置项排序
sort -t= config.conf
# 按配置值排序
sort -t= -k 2 config.conf
# 按配置值数值排序
sort -t= -n -k 2 config.conf
# 去重排序配置项
sort -u config.conf
场景四:代码统计
# 统计代码行数
wc -l *.py | sort -n
# 统计文件大小
ls -l *.py | sort -n -k 5
# 统计函数定义
grep 'def ' *.py | sort
# 统计import语句
grep 'import ' *.py | sort -u
# 统计TODO注释
grep 'TODO' *.py | sort
7. 与其他命令的区别
| 命令 | 特点 | 适用场景 |
|---|---|---|
sort | 对文本行进行排序 | 数据排序、去重、合并 |
uniq | 去除重复行 | 去重、统计 |
cut | 按列提取文本 | 提取指定字段 |
awk | 文本处理工具 | 复杂字段处理 |
sed | 流编辑器 | 文本替换、删除 |
8. 注意事项
- 字段分隔符:默认使用空格分隔,使用
-t选项指定其他分隔符 - 字段编号:字段编号从1开始,使用
-k选项指定 - 数值排序:使用
-n选项按数值排序,否则按字典顺序 - 去重:使用
-u选项去重,或结合uniq命令 - 输出控制:使用
-o选项输出到文件,或使用管道
9. 常见问题解决
(1) 字段分隔符问题
# 指定制表符分隔符
sort -t $'\t' file.txt
# 指定逗号分隔符
sort -t, file.csv
# 指定冒号分隔符
sort -t: file.txt
# 指定多个字符分隔符(需要预处理)
tr ':' ' ' < file.txt | sort
(2) 字段编号错误
# 检查字段编号
head -n 1 file.txt | tr ' ' '\n' | nl
# 指定正确的字段编号
sort -k 2 file.txt
# 指定字段范围
sort -k 2,4 file.txt
# 指定字段字符位置
sort -k 2.3,2.5 file.txt
(3) 数值排序问题
# 按数值排序
sort -n numbers.txt
# 按第2列数值排序
sort -n -k 2 data.txt
# 按第2列数值反向排序
sort -nr -k 2 data.txt
# 按第2列数值排序,第1列字典排序
sort -n -k 2 -k 1 data.txt
(4) 去重问题
# 去重排序
sort -u file.txt
# 按第2列去重排序
sort -u -k 2 file.txt
# 去重并统计出现次数
sort file.txt | uniq -c
# 去重并按出现次数排序
sort file.txt | uniq -c | sort -nr
# 去重并保存到文件
sort -u file.txt -o unique.txt
核心要点总结:
sort用于对文本文件的行进行排序,支持多种排序方式- 常用选项:
-n(数值排序)、-r(反向排序)、-u(去重)、-k(指定字段)、-t(指定分隔符) - 排序类型:字典排序、数值排序、月份排序、反向排序
- 实际应用:数据排序、日志分析、配置文件处理、代码统计
- 注意事项:字段分隔符、字段编号、数值排序、去重处理
sort命令是Linux系统中最常用的文本处理工具之一,熟练掌握可以大大提高数据处理效率。