Shell脚本中sort工具的实现

 更新时间:2025年08月11日 10:16:29   作者:咖啡の猫  
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工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入浅出Shell编程 Shell变量介绍

    深入浅出Shell编程 Shell变量介绍

    先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量。其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。
    2013-01-01
  • 一个简单的转换输出的shell脚本代码

    一个简单的转换输出的shell脚本代码

    一个简单的转换输出的shell脚本,学习shell脚本的朋友可以看下实现方法
    2013-02-02
  • virtualbox 中的linux 共享文件的方法

    virtualbox 中的linux 共享文件的方法

    这篇文章主要介绍了virtualbox 中的linux 共享文件的方法,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • 详解linux中的文件权限识别及修改

    详解linux中的文件权限识别及修改

    在 Linux 系统中,一切皆文件,这篇文章主要来和大家介绍一下linux中的文件权限识别以及修改,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • vim命令汇总

    vim命令汇总

    本文主要介绍了vim命令汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • bash shell 重定向输入和输出的例子

    bash shell 重定向输入和输出的例子

    这篇文章主要介绍了bash shell 重定向输入和输出的相关资料,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 让Linux下的cron以秒为单位执行shell脚本的3种方法

    让Linux下的cron以秒为单位执行shell脚本的3种方法

    这篇文章主要介绍了让Linux下的cron以秒为单位执行shell脚本的3种方法,cron默认只支持以分为单位执行Shell脚本的,需要的朋友可以参考下
    2014-10-10
  • Linux下查看内存使用情况的方法总结

    Linux下查看内存使用情况的方法总结

    在做Linux系统优化的时候,物理内存是其中最重要的一方面,自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况,下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法,需要的朋友可以参考下
    2024-01-01
  • Shell命令解析之set命令的用法和参数详解

    Shell命令解析之set命令的用法和参数详解

    set 命令作用主要是显示系统中已经存在的 shell 变量,以及设置 shell 变量的新变量值,这篇文章主要介绍了Shell命令解析之set命令的用法和参数详解,需要的朋友可以参考下
    2023-10-10
  • 总结的7个shell字符串操作方法和实例分享

    总结的7个shell字符串操作方法和实例分享

    这篇文章主要介绍了总结的7个shell字符串操作方法和实例分享,包括长度获取、查找位置、字符截取、匹配查询等,需要的朋友可以参考下
    2014-07-07

最新评论