Linux 常用命令 - sort 【对文件内容进行排序】
简介
sort 命令源于英文单词 “sort”,表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort
通过逐行读取文件(没有指定文件或指定文件为 -
时读取标准输入)内容,并按照指定的排序规则对行进行排序,最后输出排序后的结果。
使用方式
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
排序相关选项
-
-b, --ignore-leading-blanks
:忽略行首的空白字符。 -
-d, --dictionary-order
:使用字典顺序排序(只考虑空白字符和字母及数字字符)。 -
-f, --ignore-case
:排序时忽略字母的大小写(将小写字母作为大写字母看待)。 -
-g, --general-numeric-sort
:按照通用数值进行排序。 -
-i, --ignore-nonprinting
:排序时忽略不可打印的字符。 -
-M, --month-sort
:按照月份缩写进行排序( (unknown) < ‘JAN’ < … < ‘DEC’)。 -
-h, --human-numeric-sort
:按照便于阅读的数值排序,例如2K
1G
。 -
-n, --numeric-sort
:按照简单的数值进行排序。 -
-R, --random-sort
:随机排序,类似于洗牌。但具有相同内容的行会被保持在一起。 -
--random-source=FILE
:指定FILE
文件为随机数生成源供随机排序使用。 -
-r, --reverse
:反转排序结果,即倒序排列。 -
--sort=WORD
:根据WORD
的内容进行排序,其中WORD
包含:general-numeric -g
,human-numeric -h
,month -M
,numeric -n
,random -R
,version -V
。 -
-V, --version-sort
:按照版本号的自然顺序进行排序。
其他选项
--batch-size=NMERGE
:指定一次性合并文件或处理数据时的最大数量,超过的数量会使用临时文件。-c, --check, --check=diagnose-first
:检查输入数据是否已经排序(该操作不会进行排序)。-C, --check=quiet, --check=silent
:同-c
,但在发现未排序的行时不会输出提示信息,仅以一个错误码退出来指示未排序状态。--compress-program=PROG
:指定外部压缩程序PROG
来对临时文件进行压缩。使用PROG -d
来解压缩。--debug
:使用特殊的标记注释用于排序的行,并且对于一些可能的问题输出警告信息到stderr
。可以帮助理解排序规则。--files0-from=F
:从文件F
中读取以NUL
结尾的所有文件名称来进行排序;如果F
是-
,那么从标准输入中读取文件名。-k, --key=KEYDEF
:通过指定一个key
来进行排序;通常后面跟KEYDEF
参数(下文有描述)用来指定排序键的详细信息。-m, --merge
:合并已经排序的文件(不会进行排序)。-o, --output=FILE
:将排序结果写入指定的输出文件FILE
,而不是打印到标准输出中。-s, --stable
:通过禁用最后的比较来进行稳定排序。-S, --buffer-size=SIZE
:指定排序操作可以使用的最大内存大小,超过该值会使用临时文件存储额外的数据。-t, --field-separator=SEP
:指定字段的分隔符为SEP
。-T, --temporary-directory=DIR
:指定DIR
为临时文件目录来替代默认的$TMPDIR
或/tmp
;多次使用该选项指定多个临时目录。--parallel=N
:指定sort
命令在执行排序时可以使用的最大并行运行数量。-u, --unique
:该选项与-c
共同使用时表示检查文件是否按照严格顺序排序。严格顺序指不仅每行相对于前一行按照指定顺序排列,还不能有重复行。不与-c
使用时则会在排序后去除重复行。-z, --zero-terminated
:指定以零字符(NULL
字符,\0
)替代默认的换行符(\n
)作为记录分隔符。--help
:显示帮助信息。--version
:显示版本信息。
KEYDEF
-k
选项后一般会跟一个 KEYDEF
参数,该参数用于定义排序时的起始位置和停止位置。以及可能覆盖全局排序选项的字段和特定的排序选项。
其格式为 F[.C][OPTS][,F[.C][OPTS]]
其中 F
为字段(列)号,表示参与排序的字段(列)(从 1 开始计数)。
C
表示字段内字符的位置(从 1 开始计数),可选,如果指定了 C
则排序会从字段的第 C
个字符开始。
OPTS
是一个或多个单字母排序选项(如 bdfgiMhnRrV
),这些参数可以覆盖全局的排序选项。
第二个 F[.C][OPTS]
也是可选的,用于指定排序键的结束位置。如果未指定结束位置,则默认以行尾为结束。
在使用该参数进行复杂排序的时候,可以借助于 --debug
来调试排序行为,从而验证自己的排序语法是否正确。
参考示例
1. 对指定文件进行默认排序
sort test.txt
首先使用 cat
命令查看 test.txt
中的内容,可以发现其每行内容是乱序分布的,接着使用 sort
命令对该文件内容进行排序,最后输出每行按照字母顺序排列的结果:
jay@jaylinuxlenovo:~/test$ cat test.txt
aaaa
cccc
ffff
eeee
bbbb
aaaa
jay@jaylinuxlenovo:~/test$ sort test.txt
aaaa
aaaa
bbbb
cccc
eeee
ffff
2. 对指定文件进行默认排序,但忽略相同行
sort -u test.txt
如果文件内容中存在相同的行,则可以使用 -u
选项删除重复内容,只保留唯一的行。可以看到对例一中的文件使用 -u
排序后,原来结果中存在的两行 aaaa
只剩下了一行:
jay@jaylinuxlenovo:~/test$ sort -u test.txt
aaaa
bbbb
cccc
eeee
ffff
3. 对指定文件进行简单的数值排序
sort -n test.txt
如果文件内容中包含普通的数字,并且需要按数值的大小进行排序,则需要用到 -n
选项。通过本例的演示可以看出,如果不使用该选项,则排序结果是按照 ASCII
码的值排序,但这样得到的结果并不是我们想要的,而使用了 -n
后,才是真正按数值的大小进行排列的结果:
jay@jaylinuxlenovo:~/test$ cat test.txt #原内容
12
103
45
1
235
79
66jay@jaylinuxlenovo:~/test$ sort test.txt # 普通排序
1
103 #这里按照 ASCII 值排序,明显不是我们想要的
12
235
45
66
79
jay@jaylinuxlenovo:~/test$ sort -n test.txt # 数值排序
1
12
45
66
79
103
235
4. 反转数值排序的结果(使用降序排序)
sort -rn test.txt
sort
默认是升序排列,即先小后大,使用 -r
选项可以反转为降序排列,即从大到小:
jay@jaylinuxlenovo:~/test$ sort -rn test.txt
235
103
79
66
45
12
1
5.使用指定的排序模式进行排序
sort -nk 2 -t : test.txt
首先使用 cat
命令确认 test.txt
中的内容,然后使用 -n
指定用数值排序,-k 2
指定基于第二列进行排序,-t
: 指定列分隔符为 :
:
jay@jaylinuxlenovo:~/test$ cat test.txt
banana:10:香蕉
apple:30:苹果
orange:8:橙子
pear:25:梨子
cherry:60:樱桃
watermelon:27:西瓜
jay@jaylinuxlenovo:~/test$ sort -nk 2 -t : test.txt
orange:8:橙子
banana:10:香蕉
pear:25:梨子
watermelon:27:西瓜
apple:30:苹果
cherry:60:樱桃
注意事项
-
默认情况下,
sort
命令是按照字符的ASCII
值进行排序的。这意味着如果排序内容包含数字,它们会按照字母顺序而不是数值进行排序,这可能导致排序结果与实际不符。例如 10 会排在 2 前面。因此如果想要按照实际的数值排序,需要使用-g
选项。 -
默认情况下,
sort
会按照升序排列,即从小到大、从A
到Z
。也可以通过-r
选项进行从大到小的降序排列。 -
sort
的-n
和-g
选项都能用于数值排序,但-n
选项只能识别一些简单数值形式,如整数、浮点数等。而-g
选项则能处理更广泛的数值表示形式,如科学计数法。其在解析复杂数值格式方面更为健壮。但在处理简单的数字时可能没有-n
的效率高。 -
默认情况下
-R
选项会使用系统内部生成的随机种子,而--random-source=FILE
允许用户指定一个文件作为随机数生成的源,即随机种子文件。这个选项与-R
结合使用时可以控制随机排序的结果,如果两次随机排序指定了同一个文件并且文件内容没有变,则随机排序结果也是相同的。需要注意的是如果该文件包含的内容长度不够时会报错。 -
-c
和-C
选项都用于检测输入数据是否经过排序,如果检测到是排序后的数据,则不会输出任何信息并且以0
状态码退出。不同的是,如果遇到未排序的数据,-c
会输出第一个未排序行的信息,并以非零错误码退出,而-C
不会输出任何信息,仅以一个非零错误码退出来指示未排序状态。 -
sort
命令的排序顺序会受到系统区域设置(locale
)的影响。为了确保排序结果的一致性,可以通过设置LC_ALL=C
来强制使用传统的字节值排序。
相关文章:
Linux 常用命令 - sort 【对文件内容进行排序】
简介 sort 命令源于英文单词 “sort”,表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件(没有指定文件或指定文件为 - 时读取标准输入)内容,并按照…...

MyBatis最佳实践:提升数据库交互效率的秘密武器
第一章:框架的概述: MyBatis 框架的概述: MyBatis 是一个优秀的基于 Java 的持久框架,内部对 JDBC 做了封装,使开发者只需要关注 SQL 语句,而不关注 JDBC 的代码,使开发变得更加的简单MyBatis 通…...

选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制):https:/…...

DeepSeek-R1:强化学习驱动的推理模型
1月20日晚,DeepSeek正式发布了全新的推理模型DeepSeek-R1,引起了人工智能领域的广泛关注。该模型在数学、代码生成等高复杂度任务上表现出色,性能对标OpenAI的o1正式版。同时,DeepSeek宣布将DeepSeek-R1以及相关技术报告全面开源。…...

国内优秀的FPGA设计公司主要分布在哪些城市?
近年来,国内FPGA行业发展迅速,随着5G通信、人工智能、大数据等新兴技术的崛起,FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此,国内优秀的FPGA设计公司主要分布在哪些城市&a…...
3.日常英语笔记
screening discrepancies 筛选差异 The team found some screening discrepancies in the data. 团队在数据筛选中发现了些差异。 Don’t tug at it ,or it will fall over and crush you. tug 拉,拽,拖 He tugged the door open with all his might…...

基于RIP的MGRE实验
实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…...

【开源免费】基于Vue和SpringBoot的美食推荐商城(附论文)
本文项目编号 T 166 ,文末自助获取源码 \color{red}{T166,文末自助获取源码} T166,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Pandas DataFrame 拼接、合并和关联
拼接:使用 pd.concat(),可以沿着行或列方向拼接 DataFrame。 合并:使用 pd.merge(),可以根据一个或多个键进行不同类型的合并(左连接、右连接、全连接、内连接)。 关联:使用 join() 方法,通常在设置了索引的 DataFrame 上进行关联操作。 concat拼接 按列拼接 df1 = …...

【Redis】Redis修改连接数参数
1.重启操作背景 Redis数据库连接数上限,需要修改配置文件里maxclients参数,修改后需重启数据库 1.1、修改操作系统open files参数 1.2、修改redis连接数 2.登录操作系统 登录堡垒机 ssh {ip}3.查看当前状态 3.1、查看操作系统配置 ulimit -a3.2、…...

scratch变魔术 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析
目录 scratch变魔术 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、py…...

51单片机开发:点阵屏显示数字
实验目标:在8x8的点阵屏上显示数字0。 点阵屏的原理图如下图所示,点阵屏的列接在P0端口,行接在74HC595扩展的DP端口上。 扩展口的使用详见:51单片机开发:IO扩展(串转并)实验-CSDN博客 要让点阵屏显示数字࿰…...
mysql DDL可重入讨论
mysql的bug:当执行 MySQL online DDL 时,期间如有其他并发的 DML 对相同的表进行增量修改,比如 update、insert、insert into … on duplicate key、replace into 等,且增量修改的数据违背唯一约束,那么 DDL 最后都会执…...

DAY01 面向对象回顾、继承、抽象类
学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...
127周一复盘 (165)玩法与难度思考
1.上午测试,小改了点东西, 基本等于啥也没干。 匆忙赶往车站。 从此进入春节期间,没有开发,而思考与设计。 2.火车上思考玩法与难度的问题。 目前的主流作法实际上并不完全符合不同玩家的需求, 对这方面还是要有自…...

【C语言常见概念详解】
目录 -----------------------------------------begin------------------------------------- 什么是C语言: 1. 基本数据类型 2. 变量与常量 3. 运算符与表达式 4. 控制结构 5. 函数 6. 指针 7. 数组与字符串 8. 结构体与联合体 9. 文件操作 结语 ----…...
弹性分组环——RPR技术
高频考点,考查20次: RPR与FDDI一样使用双环结构RPR环中的每一个节点都会执行SRP公平算法(非DPT、MPLS)传统的FDDI环,当源节点成功向目的结点发送一个数据帧后,这个数据帧由源结点从环中回收。但RPR环&#…...
定制Centos镜像
环境准备: 一台最小化安装的干净的系统,这里使用Centos7.9,一个Centos镜像,镜像也使用Centos7.9的。 [rootlocalhost ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# rpm -qa | wc -l 306 [rootloca…...
Java---判断素数的三种方法
我们首先先来了解一下什么是素数 素数:一个整数只能被1和自身整除 , 注意:0与1不是素数 目录 方法一:暴力法 方法二:除二法(优化) 方法三.根号法(最优法) 方法一:暴力法 最简单最暴力的方法就是根据定义,判断n是不是素数,让n除以2到n-1的所有数,只要遇到能除开…...

多级缓存(亿级并发解决方案)
多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...