【Linux】常用命令:sort


sort 不仅能实现基础的字符 / 数字排序,还支持多字段排序、去重、内存优化、大文件排序、自定义分隔符等核心功能,是处理日志、业务数据、配置文件的必备工具。

复制代码
======= 🌟 青柠来相伴,代码更简单。🌟 =======
📚 本文所有内容,我都整理在了博客合集里。👇
🎯 搜索关注【青柠代码录】,即可查看所有博客文章 ~
======= 🌟 =================== 🌟 =======

一、sort 命令核心基础

1.1 命令定义

sort 是 Linux 内置的文本排序工具,默认按每行的第一个字符以 ASCII 码值升序排序,不会修改原文件,默认输出到标准输出(控制台)。

1.2 基础语法

复制代码
sort [选项参数] 文件名
# 输出到文件:sort 选项 源文件 > 目标文件
# 安全覆盖原文件:sort 选项 源文件 -o 源文件

1.3 默认排序规则(关键)

  1. 数字 < 大写字母 < 小写字母(ASCII 码顺序)
  2. 逐字符对比,直到找到不同字符为止
  3. 空白行默认排在最前面

1.4 统一测试文件

创建 data.log 模拟真实业务数据,全文示例均基于该文件:

复制代码
10 运维部 8000
2  技术部 15000
5  产品部 12000
10 运维部 8000
3  测试部 9000
  8  设计部 10000

二、参数整合

参数 1:-n 按纯数字升序排序

作用 :将文本内容当作数字进行排序,解决默认字符排序导致 10 排在 2 前面的问题命令

复制代码
sort -n data.log

执行结果

复制代码
2  技术部 15000
3  测试部 9000
5  产品部 12000
  8  设计部 10000
10 运维部 8000
10 运维部 8000

场景:员工 ID、订单编号、端口号、薪资等数字类型数据排序


参数 2:-r 降序排序

作用 :将排序结果反转,默认升序,添加 -r 变为降序命令

复制代码
sort -nr data.log

执行结果

复制代码
10 运维部 8000
10 运维部 8000
  8  设计部 10000
5  产品部 12000
3  测试部 9000
2  技术部 15000

场景:查询最高薪资、最新日志、最大订单金额


参数 3:-u 排序并去重

作用 :排序完成后自动删除重复行,仅保留唯一行命令

复制代码
sort -nru data.log

执行结果

复制代码
10 运维部 8000
8  设计部 10000
5  产品部 12000
3  测试部 9000
2  技术部 15000

场景:统计唯一访问 IP、去重用户数据、清洗重复订单


参数 4:-b 忽略行首空白字符

作用 :自动忽略行开头的空格、Tab 缩进,不影响排序结果命令

复制代码
sort -bn data.log

执行结果

复制代码
2  技术部 15000
3  测试部 9000
5  产品部 12000
8  设计部 10000
10 运维部 8000
10 运维部 8000

场景:格式化配置文件、缩进代码、格式不规范的日志排序


参数 5:-f 忽略大小写排序

作用 :排序时不区分大小写,A 和 a 视为相同字符测试文件test.txt

复制代码
Apple
banana
orange
Banana

命令

复制代码
sort -f test.txt

执行结果

复制代码
Apple
banana
Banana
orange

场景:英文日志、用户名、域名等不区分大小写的数据排序


参数 6:-t 指定字段分隔符

作用 :自定义列分隔符,默认以空格 / Tab 为分隔符,支持逗号、竖线等测试文件user.csv

复制代码
1,张三,8000
2,李四,15000
3,王五,12000

命令

复制代码
sort -t "," -k 3nr user.csv

执行结果

复制代码
2,李四,15000
3,王五,12000
1,张三,8000

场景:CSV 文件、日志文件、竖线分隔的结构化数据处理


参数 7:-k 指定排序字段

作用 :指定按第几列进行排序,支持数字、降序等组合使用命令:按第 3 列(薪资)数字降序排序

复制代码
sort -t " " -k 3nr data.log

执行结果

复制代码
2  技术部 15000
5  产品部 12000
8  设计部 10000
3  测试部 9000
10 运维部 8000
10 运维部 8000

场景:按指定列排序(部门、薪资、年龄、访问量等)


参数 8:-o 安全写入原文件

作用 :将排序结果直接写入原文件,避免重定向 > 清空文件命令

复制代码
sort -n data.log -o data.log

执行结果 :原文件 data.log 直接被排序后覆盖,无数据丢失场景:直接修改配置文件、数据文件的排序结果


参数 9:-c 检查文件是否已排序

作用 :不执行排序,仅检查文件是否有序,无序则提示位置命令

复制代码
sort -c data.log

执行结果 :无序文件会输出:sort: data.log:4: disorder: 10 运维部 8000场景:数据校验、脚本中判断文件是否有序


参数 10:-m 合并已排序文件

作用 :快速合并多个已经排好序的文件,无需重新全量排序命令

复制代码
sort -m file1.log file2.log > merged.log

场景:合并按天排序的日志文件、批量排序数据合并


参数 11:-V 版本号自然排序

作用 :按软件版本号规则排序(解决 1.2.10 < 1.2.2 问题)测试文件version.log

复制代码
1.2.1
1.12.3
1.2.10

命令

复制代码
sort -V version.log

执行结果

复制代码
1.2.1
1.2.10
1.12.3

场景:服务版本号、JAR 包版本、镜像标签排序


参数 12:-h 人类可读单位排序

作用 :支持 K、M、G、T 等存储单位自动排序命令

复制代码
ls -lh | sort -k 5hr

执行结果 :按文件大小从大到小排序,自动识别 1G、500M 等单位场景:磁盘文件大小排序、存储容量统计


参数 13:-M 按月份排序

作用 :识别英文月份缩写,按 JAN < FEB < ... < DEC 排序测试文件month.log

复制代码
MAR
JAN
FEB

命令

复制代码
sort -M month.log

执行结果

复制代码
JAN
FEB
MAR

场景:按月统计日志、月度业务数据排序


参数 14:-R 随机排序

作用 :将文件内容随机打乱顺序命令

复制代码
sort -R data.log

场景:测试数据抽样、随机选取样本数据


三、高频组合命令

1. 多字段组合排序(先部门升序,再薪资降序)

复制代码
sort -t " " -k 2 -k 3nr data.log

2. 大文件高性能排序(4 核 CPU+1G 内存 + 临时目录)

复制代码
sort --parallel=4 -S 1G -T /tmp bigfile.log -o sorted.log

3. Nginx 日志访问 IP TOP10 统计

复制代码
awk '{print $1}' access.log | sort -nru | head -10

4. CSV 数据清洗(去重 + 排序 + 覆盖原文件)

复制代码
sort -t "," -k 5n -u order.csv -o order_clean.csv

本文由mdnice多平台发布

相关推荐
小码哥_常11 小时前
一个Starter搞定六种防护,Spring Boot API的超强护盾来了
后端
小村儿13 小时前
连载04-最重要的Skill---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程
IT_陈寒14 小时前
Vite的alias配置把我整不会了,原来是这个坑
前端·人工智能·后端
gelald14 小时前
Spring Boot - 自动配置原理
java·spring boot·后端
希望永不加班14 小时前
SpringBoot 集成测试:@SpringBootTest 与 MockMvc
java·spring boot·后端·log4j·集成测试
uzong14 小时前
软件人员可以关注的 Skill,亲测确实不错,值得试一下
人工智能·后端
掘金虾14 小时前
Hono 框架入门到实战:用 Node.js 写一个支持工具调用的流式对话 Agent
后端
用户83562907805115 小时前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python
树獭叔叔15 小时前
Claude Code 工具系统深度剖析:从静态注册到动态发现
后端·aigc·openai
树獭叔叔15 小时前
Claude Code 的上下文管理:多层渐进式压缩架构深度解析
后端·aigc·openai