文章目录
- sort names.txt 默认按字母顺序升序排序。
- cat scores.txt # 内容: # 90 # 85 # 100 # 78 sort -n scores.txt 输出: 788590100
- sort -nr scores.txt 输出: 100908578
- 假设有一个 CSV 文件 data.csv: Alice,28,Beijing Bob,32,Shanghai Charlie,25,Guangzhou 按年龄排序: sort -t’,’ -k2 data.csv 输出: Charlie,25,GuangzhouAlice,28,BeijingBob,32,Shanghai
- cat logs.txt # 内容: # error # warning # error # info sort -u logs.txt 输出: errorinfowarning
目录
- 一、前言
- 二、什么是 sort?
- ✅ 典型用途包括:
- 三、sort 基础语法
- ✅ 常用选项说明:
- 四、sort 使用示例
- ✅ 示例1:基本排序
- ✅ 示例2:按数值排序(-n)
- ✅ 示例3:逆序排序(-r)
- ✅ 示例4:按字段排序(-k+-t)
- ✅ 示例5:去重排序(-u)
- 五、sort 在 Shell 脚本中的应用
- ✅ 示例1:统计访问最多的 IP 并排序
- ✅ 示例2:提取用户名并排序输出
- ✅ 示例3:按日期排序日志文件
- 六、sort 与其他命令的配合使用
- ✅ 示例1:统计访问次数最多的 URL(sort+cut+uniq)
- ✅ 示例2:按内存占用排序进程信息(ps+sort)
- ✅ 示例3:合并两个文件并去重排序(cat+sort+uniq)
- 七、sort 使用技巧总结
- 八、sort 实战案例汇总
- ✅ 案例1:从/etc/passwd提取用户名并排序
- ✅ 案例2:按 HTTP 状态码排序日志
- ✅ 案例3:统计访问最多的 IP(带排序)
- 九、常见问题与解决方法
- 十、总结对比表:sort 常用参数一览
- 十一、结语
在 Linux/Unix 系统中,sort 是一个非常实用的文本排序命令,它可以帮助我们对文件或标准输入的数据进行 按行排序,支持多种排序方式,包括按字符串排序、按数值排序、指定字段排序等。
无论是查看日志、统计访问次数,还是编写自动化脚本,sort 都是一个不可或缺的工具。
本文将带你全面了解 sort 工具的使用方式,包括:
✅ sort 的基本语法与常用参数
✅ 如何按字段、数值、字符等进行排序
✅ sort 在 Shell 脚本中的实战应用
✅ 与其他文本处理命令的联合使用
✅ 实际开发中的常见问题与优化建议
并通过完整的代码示例帮助你快速上手并熟练掌握 sort 的各种高级用法。
sort 是一个用于 对文本数据进行排序 的命令行工具。
sort 是一个用于 对文本数据进行排序 的命令行工具。
它可以:
- 对文件按行排序
- 支持升序或降序排列
- 按照指定字段排序
- 忽略大小写、按数值排序等
| 场景 | 示例 |
|---|---|
| 日志分析 | 对访问日志按时间排序 |
| 数据统计 | 对 IP 出现频率排序 |
| 配置管理 | 对配置项按关键字排序 |
| 自动化脚本 | 排序后去重输出唯一值 |
sort [选项] 文件名
| 参数 | 描述 |
|---|---|
| -n | 按数值排序 |
| -r | 逆序(降序)排序 |
| -k | 指定排序字段(如 -k2 表示按第2个字段排序) |
| -t | 指定字段分隔符(默认为空格或制表符) |
| -u | 输出唯一行(去重) |
| -b | 忽略前导空格 |
| -f | 忽略大小写 |
| -o | 将结果输出到文件 |
sort names.txt
默认按字母顺序升序排序。
cat scores.txt
# 内容:
# 90
# 85
# 100
# 78
sort -n scores.txt
输出:
78
85
90
100
sort -nr scores.txt
输出:
100
90
85
78
假设有一个 CSV 文件 data.csv:
Alice,28,Beijing Bob,32,Shanghai Charlie,25,Guangzhou
按年龄排序:
sort -t',' -k2 data.csv
输出:
Charlie,25,Guangzhou
Alice,28,Beijing
Bob,32,Shanghai
cat logs.txt
# 内容:
# error
# warning
# error
# info
sort -u logs.txt
输出:
error
info
warning
grep 'GET /index.html' access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr
输出类似:
123 192.168.1.100
98 192.168.1.101
…
cut -d':' -f1 /etc/passwd | sort
输出所有用户并按字母排序。
sort -k1,1 -k2,2n access.log
先按第一列(日期)排序,再按第二列(时间)排序。
cut -d'"' -f2 access.log | cut -d' ' -f2 | sort | uniq -c | sort -nr | head -n 10
输出访问最多的前 10 个 URL。
ps aux --sort=-%mem | head -n 10
输出内存占用最高的前 10 个进程。
cat file1.txt file2.txt | sort -u
输出两个文件合并后的唯一内容。
| 技巧 | 说明 |
|---|---|
| ✅ 使用 -n 按数值排序 | 避免字符串比较干扰 |
| ✅ 使用 -r 逆序输出 | 快速获取最大/最新记录 |
| ✅ 使用 -k 多字段排序 | 实现复杂排序逻辑 |
| ✅ 使用 -t 自定义分隔符 | 适用于 CSV、TSV 等格式 |
| ✅ 使用 -u 去重排序 | 快速获取唯一值 |
| ✅ 使用 -f 忽略大小写 | 更灵活匹配关键词 |
| ✅ 结合 uniq 统计频率 | 实现排名功能 |
| ✅ 使用 -o 输出到文件 | 避免覆盖原文件 |
cut -d':' -f1 /etc/passwd | sort
cut -d'"' -f3 access.log | cut -d' ' -f2 | sort -n
cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 排序不准确 | 字段分隔符错误 | 检查 -t 是否匹配实际分隔符 |
| 数字排序异常 | 未使用 -n | 添加 -n 强制按数值排序 |
| 输出乱序 | 输入未预处理 | 使用 tr 或 awk 格式化后再排序 |
| 去重无效 | 未使用 -u | 添加 -u 去除重复行 |
| 中文排序乱码 | 编码不一致 | 设置 LANG=C 或使用 iconv 转换编码 |
| 参数 | 功能 |
|---|---|
| -n | 按数值排序 |
| -r | 逆序排序 |
| -k | 指定字段排序 |
| -t | 自定义字段分隔符 |
| -u | 去重输出 |
| -f | 忽略大小写 |
| -b | 忽略前导空格 |
| -o | 输出到文件 |
到此这篇关于Shell脚本中sort工具的实现的文章就介绍到这了,更多相关Shell sort工具内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- C++实现希尔排序(ShellSort)
- PHP排序算法之希尔排序(Shell Sort)实例分析
- C++实现简单的希尔排序Shell Sort实例
- Shell脚本中cut工具的实现
- Shell脚本中grep工具的使用
- Shell脚本中diff工具的使用
- Shell脚本实现其他变量定义
- shell脚本批量导出redis key-value方式
- Linux脚本(shell)的使用方式
- shell批量添加新用户的脚本
- Shell脚本之while循环应用具体案例
- Shell脚本实现服务器多台免密登录操作