linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > Shell sort工具

Shell脚本中sort工具的实现

作者:咖啡の猫

sort是一个非常实用的文本排序命令,它可以帮助我们对文件或标准输入的数据进行按行排序,支持多种排序方式,本文就来介绍了sort工具的使用,感兴趣的可以了解一下

一、前言

在 Linux/Unix 系统中,sort 是一个非常实用的文本排序命令,它可以帮助我们对文件或标准输入的数据进行 按行排序,支持多种排序方式,包括按字符串排序、按数值排序、指定字段排序等。

无论是查看日志、统计访问次数,还是编写自动化脚本,sort 都是一个不可或缺的工具。

本文将带你全面了解 sort 工具的使用方式,包括:

sort 的基本语法与常用参数
✅ 如何按字段、数值、字符等进行排序
sort 在 Shell 脚本中的实战应用
✅ 与其他文本处理命令的联合使用
✅ 实际开发中的常见问题与优化建议

并通过完整的代码示例帮助你快速上手并熟练掌握 sort 的各种高级用法。

二、什么是 sort?

sort 是一个用于 对文本数据进行排序 的命令行工具。

它可以:

✅ 典型用途包括:

场景示例
日志分析对访问日志按时间排序
数据统计对 IP 出现频率排序
配置管理对配置项按关键字排序
自动化脚本排序后去重输出唯一值

三、sort 基础语法

sort [选项] 文件名

✅ 常用选项说明:

参数描述
-n按数值排序
-r逆序(降序)排序
-k指定排序字段(如 -k2 表示按第2个字段排序)
-t指定字段分隔符(默认为空格或制表符)
-u输出唯一行(去重)
-b忽略前导空格
-f忽略大小写
-o将结果输出到文件

四、sort 使用示例

✅ 示例1:基本排序

sort names.txt

默认按字母顺序升序排序。

✅ 示例2:按数值排序(-n)

cat scores.txt
# 内容:
# 90
# 85
# 100
# 78

sort -n scores.txt

输出:

78
85
90
100

✅ 示例3:逆序排序(-r)

sort -nr scores.txt

输出:

100
90
85
78

✅ 示例4:按字段排序(-k+-t)

假设有一个 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

✅ 示例5:去重排序(-u)

cat logs.txt
# 内容:
# error
# warning
# error
# info

sort -u logs.txt

输出:

error
info
warning

五、sort 在 Shell 脚本中的应用

✅ 示例1:统计访问最多的 IP 并排序

grep 'GET /index.html' access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr

输出类似:

123 192.168.1.100
98 192.168.1.101
...

✅ 示例2:提取用户名并排序输出

cut -d':' -f1 /etc/passwd | sort

输出所有用户并按字母排序。

✅ 示例3:按日期排序日志文件

sort -k1,1 -k2,2n access.log

先按第一列(日期)排序,再按第二列(时间)排序。

六、sort 与其他命令的配合使用

✅ 示例1:统计访问次数最多的 URL(sort+cut+uniq)

cut -d'"' -f2 access.log | cut -d' ' -f2 | sort | uniq -c | sort -nr | head -n 10

输出访问最多的前 10 个 URL。

✅ 示例2:按内存占用排序进程信息(ps+sort)

ps aux --sort=-%mem | head -n 10

输出内存占用最高的前 10 个进程。

✅ 示例3:合并两个文件并去重排序(cat+sort+uniq)

cat file1.txt file2.txt | sort -u

输出两个文件合并后的唯一内容。

七、sort 使用技巧总结

技巧说明
✅ 使用 -n 按数值排序避免字符串比较干扰
✅ 使用 -r 逆序输出快速获取最大/最新记录
✅ 使用 -k 多字段排序实现复杂排序逻辑
✅ 使用 -t 自定义分隔符适用于 CSV、TSV 等格式
✅ 使用 -u 去重排序快速获取唯一值
✅ 使用 -f 忽略大小写更灵活匹配关键词
✅ 结合 uniq 统计频率实现排名功能
✅ 使用 -o 输出到文件避免覆盖原文件

八、sort 实战案例汇总

✅ 案例1:从/etc/passwd提取用户名并排序

cut -d':' -f1 /etc/passwd | sort

✅ 案例2:按 HTTP 状态码排序日志

cut -d'"' -f3 access.log | cut -d' ' -f2 | sort -n

✅ 案例3:统计访问最多的 IP(带排序)

cut -d' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10

九、常见问题与解决方法

问题原因解决方案
排序不准确字段分隔符错误检查 -t 是否匹配实际分隔符
数字排序异常未使用 -n添加 -n 强制按数值排序
输出乱序输入未预处理使用 tr 或 awk 格式化后再排序
去重无效未使用 -u添加 -u 去除重复行
中文排序乱码编码不一致设置 LANG=C 或使用 iconv 转换编码

十、总结对比表:sort 常用参数一览

参数功能
-n按数值排序
-r逆序排序
-k指定字段排序
-t自定义字段分隔符
-u去重输出
-f忽略大小写
-b忽略前导空格
-o输出到文件

十一、结语

到此这篇关于Shell脚本中sort工具的实现的文章就介绍到这了,更多相关Shell sort工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文