Linux sort命令详解

sort 是 Linux 系统中用于对文本文件行进行排序的命令行工具,能够按字母顺序、数值大小、日期等规则排序,并可指定字段及分隔符,常通过管道与其他命令组合使用,是文本处理和数据分析的重要工具。


一、命令语法与核心概念

基本语法 :

bash

复制代码
sort [选项] [文件...]
  • 选项 :控制排序的行为(如排序顺序、字段分隔符等)
  • 文件 :要排序的输入文件,可指定多个;若不指定,sort 会从标准输入(stdin)读取数据

核心概念 :
sort 将输入的每一行视为一个记录,按照指定的规则比较各行,输出排序后的结果。它不会直接修改原文件,而是将排序后的结果输出到标准输出(终端)或通过重定向保存到文件。


二、常用选项详解

选项 长选项 描述
-b --ignore-leading-blanks 忽略每行开头的空白字符
-d --dictionary-order 仅考虑字母、数字和空格,忽略其他字符
-f --ignore-case 忽略大小写(将大写和小写视为相同)
-g --general-numeric-sort 按通用数值比较
-h --human-numeric-sort 比较人类可读数字(如 2K、1G)
-i --ignore-nonprinting 仅考虑可打印字符
-k --key=POS1[,POS2] 指定排序的字段位置
-m --merge 合并已排序的文件,不再排序
-M --month-sort 按月份名称排序(JAN < FEB < ... < DEC)
-n --numeric-sort 按数值大小排序(而非字符串顺序)
-o --output=FILE 将结果写入文件(而非标准输出)
-r --reverse 逆序输出排序结果
-R --random-sort 随机排序,但相同键会被分组
-t --field-separator=SEP 指定字段分隔符(默认是空白字符)
-u --unique 去除重复行,仅保留唯一行
-V --version-sort 对文本内的版本号进行自然排序
-c --check 检查输入是否已排序,若已有序则不进行操作
-C --check=quiet 类似 -c,但不报告第一个无序行
--parallel=N 指定同时运行的排序线程数
-S --buffer-size=SIZE 指定主内存缓存大小
-T --temporary-directory=DIR 指定临时文件存放目录

三、排序规则

sort 的排序规则受当前**语言环境(**locale ) 影响。在默认环境下:

  1. 以数字开头的行 优先级最高
  2. 以小写字母开头的行 优先级次之
  3. 按字典序比较

若希望按ASCII码严格排序(忽略locale影响),可设置:

bash

复制代码
LC_ALL=C sort file.txt

这会让大写字母排在前面。


四、实用示例

5.1 基础排序

bash

复制代码
#按字母顺序排序
复制代码
sort fruits.txt          #输出:apple banana grape orange
复制代码
复制代码
#按数值排序(关键:不加-n会将"10"排在"2"前面)
复制代码
sort -n numbers.txt      #输出:2 10 50 100
复制代码
复制代码
#逆序排序
复制代码
sort -r fruits.txt       #输出:orange grape banana apple
复制代码
复制代码
#忽略大小写排序
复制代码
sort -f names.txt        # 'Alice'和'alice'被视为相同\[reference:33\]
5.2 字段排序(CSV 或分隔符文件)

bash

复制代码
#按第2列(年龄)数值排序(逗号分隔)
复制代码
sort -t ',' -k 2n employees.csv
复制代码
#示例输入:John,25,male →输出:John,25,male Alice,28,female Jane,30,female Bob,35,male
复制代码
复制代码
#按第2列数值逆序排序
复制代码
sort -t ',' -k 2nr employees.csv[reference:34]
相关推荐
无言听风雨丶11 小时前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
万联WANFLOW11 小时前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
debugdynamo11 小时前
Netcatty:把 SSH 客户端做回工作台
运维·其他·ssh
时空无限11 小时前
ssh 直接免密输入 sudo 密码
运维·ssh
OPEN-F11 小时前
Ubuntu 自动登录后 GNOME 远程桌面连不上?一次登录钥匙环锁定的排查与永久修复
linux·运维·ubuntu
数字新视界11 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
硅基手札11 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
默|笙11 小时前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
修心光11 小时前
记录一次,jenkins打包异常问题
运维·jenkins
分布式存储与RustFS11 小时前
JuiceFS 接 RustFS 当数据后端:把对象存储挂成本地文件系统
运维·云原生·开源·对象存储·分布式存储·s3·性能基准