【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多平台发布

相关推荐
小江的记录本2 小时前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
驕傲的兎孒2 小时前
基于 SpringBoot + Vue3 + AI 打造企业级售后服务支持平台 | 实战方案分享
人工智能·spring boot·后端
大傻^2 小时前
Spring AI Alibaba 可观测性实践:AI应用监控与链路追踪
java·人工智能·后端·spring·springaialibaba
诗人不写诗2 小时前
spring是如何组织切面的
java·后端·spring
小杨同学493 小时前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
后端·单片机·嵌入式
天下无贼!3 小时前
【Python】2026版——FastAPI 框架快速搭建后端服务
开发语言·前端·后端·python·aigc·fastapi
大傻^3 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba
大傻^3 小时前
Spring AI Alibaba ChatClient实战:流式输出与多轮对话管理
java·人工智能·后端·spring·springai·springaialibaba
SuniaWang4 小时前
《Spring AI + 大模型全栈实战》学习手册系列· 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
java·人工智能·分布式·后端·spring·架构·typescript