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:按照便于阅读的数值排序,例如2K1G。 -
-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 通过逐行读取文件(没有指定文件或指定文件为 - 时读取标准输入)内容,并按照…...
mantisbt添加修改用户密码
文章目录 问题当前版本安装流程创建用户修改密码老的方式探索阶段 问题 不太好改密码啊。貌似必须要域名要发邮件。公司太穷,看不见的东西不关心,只能改源码了。 当前版本 当前mantisbt版本 2.27 php版本 7.4.3 安装流程 (下面流程不是…...
记录 | Docker的windows版安装
目录 前言一、1.1 打开“启用或关闭Windows功能”1.2 安装“WSL”方式1:命令行下载方式2:离线包下载 二、Docker Desktop更新时间 前言 参考文章:Windows Subsystem for Linux——解决WSL更新速度慢的方案 参考视频:一个视频解决D…...
【Elasticsearch】内置分词器和IK分词器
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新
2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新,获取见文末名片...
HarmonyOS:ForEach:循环渲染
一、前言 ForEach接口基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在ForEach父容器组件中的子组件。例如,ListItem组件要求ForEach的父容器组件必须为List组件。 API参数说明见:ForEa…...
Effective C++ 规则50:了解 new 和 delete 的合理替换时机
1、背景 在 C 中,new 和 delete 是动态分配内存的核心操作符。然而,直接使用它们有时会增加程序的复杂性,甚至导致内存泄漏和其他问题。因此,了解何时替换 new 和 delete 并选择更适合的内存管理策略,是编写高效、健壮…...
C++ STL:深入探索常见容器
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...
android12源码中用第三方APK替换原生launcher
一、前言 如何用第三方的apk替换原生launcher呢?我是参考着这位大神的博客https://blog.csdn.net/hyu001/article/details/131044358做的,完美实现。 这边博客中又加入了我个人的一些改变,整理的。 二、步骤 1.在/packages/apps/MyApp文件…...
Java面试题2025-设计模式
1.说一下开发中需要遵守的设计原则? 设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下: 1、单一职责原则 单一职责原则的定义描述非…...
【设计模式-行为型】备忘录模式
一、什么是备忘录模式 来到备忘录模式了,这个模式我感觉相对简单一些,就是备份,或者快照。跟前面一样为了加深理解,我们引入一个电影情结来说明啥是备忘录模式,以来加深大家对备忘录模式的认识。那么,在电影…...
flink StreamGraph解析
Flink程序有三部分operation组成,分别是源source、转换transformation、目的地sink。这三部分构成DAG。 DAG首先生成的是StreamGraph。 用户代码在添加operation的时候会在env中缓存(变量transformations),在env.execute()执行的…...
本地AI模型:未来智能设备的核心驱动力
标题:“本地AI模型:未来智能设备的核心驱动力” 文章信息摘要: 未来AI设备(如Meta Ray-Bans)的发展将更加依赖本地语言模型的优化与集成,而非仅依靠云端AI模型。本地模型在隐私保护、推理速度和离线访问方…...
基于SpringBoot的网上摄影工作室开发与实现 | 含论文、任务书、选题表
随着互联网技术的不断发展,摄影爱好者们越来越需要一个在线平台来展示和分享他们的作品。基于SpringBoot的网上摄影工作室应运而生,它不仅为用户提供了一个展示摄影作品的平台,还为管理员提供了便捷的管理工具。本文幽络源将详细介绍该系统的…...
数字人+展厅应用方案:开启全新沉浸式游览体验
随着人们生活质量的不断提升,对于美好体验的追求日益增长。在展厅展馆领域,传统的展示方式已难以满足大众日益多样化的需求。而通过将数字人与展厅进行深度结合,可以打造数字化、智能化新型展厅,不仅能提升展示效果,还…...
基于单片机的家用无线火灾报警系统的设计
1 总体设计 本设计家用无线火灾报警系统利用单片机控制技术、传感器检测技术、GSM通信技术展开设计,如图2.1所示为本次系统设计的主体框图,系统包括单片机主控模块、温度检测模块、烟雾检测模块、按键模块、GSM通信模块、液晶显示模块、蜂鸣器报警模块。…...
多级缓存(亿级并发解决方案)
多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…...
iic、spi以及uart
何为总线? 连接多个部件的信息传输线,是部件共享的传输介质 总线的作用? 实现数据传输,即模块之间的通信 总线如何分类? 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…...
Shell编程(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)
本篇文章继续给大家介绍Shell编程,包括for循环、并发问题,while循环,流程控制语句,函数传参、函数变量、函数返回值,反向破解MD5等内容。 1.for循环 for 变量 in [取值列表] 取值列表可以是数字 字符串 变量 序列…...
深入 Rollup:从入门到精通(三)Rollup CLI命令行实战
准备阶段:初始化项目 初始化项目,这里使用的是pnpm,也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…...
CycleGAN模型解读(附源码+论文)
CycleGAN 论文链接:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 官方链接:pytorch-CycleGAN-and-pix2pix 老规矩,先看看效果 总体流程 先简单过一遍流程,细节在代码里说。CycleGAN有…...
线程配置经验
工作时,时常会遇到,线程相关的问题与解法,本人会持续对开发过程中遇到的关于线程相关的问题及解决记录更新记录在此篇博客中。 目录 一、线程基本知识 1. 线程和进程 二、问题与解法 1. 避免乘法级别数量线程并行 1)使用线程池…...
动态规划DP 数字三角形模型 传纸条(题目分析+C++完整代码)
传纸条 原题链接 AcWing 275. 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。 一次素质拓展活动中,班上同学安排坐成一个 m行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此&#x…...
Ubuntu二进制部署K8S 1.29.2
本机说明 本版本非高可用,单Master,以及一个Node 新装的 ubuntu 22.04k8s 1.29.3使用该文档请使用批量替换 192.168.44.141这个IP,其余照着复制粘贴就可以成功需要手动 设置一个 固定DNS,我这里设置的是 8.8.8.8不然coredns无法…...
第05章 10 地形梯度场模拟显示
在 VTK(Visualization Toolkit)中,可以通过计算地形数据的梯度场,并用箭头或线条来表示梯度方向和大小,从而模拟显示地形梯度场。以下是一个示例代码,展示了如何使用 VTK 和 C 来计算和显示地形数据的梯度场…...
全程Kali linux---CTFshow misc入门
图片篇(基础操作) 第一题: ctfshow{22f1fb91fc4169f1c9411ce632a0ed8d} 第二题 解压完成后看到PNG,可以知道这是一张图片,使用mv命令或者直接右键重命名,修改扩展名为“PNG”即可得到flag。 ctfshow{6f66202f21ad22a2a19520cdd…...
[ Spring ] Spring Cloud Alibaba Message Stream Binder for RocketMQ 2025
文章目录 IntroduceProject StructureDeclare Plugins and ModulesApply Plugins and Add DependenciesSender PropertiesSender ApplicationSender ControllerReceiver PropertiesReceiver ApplicationReceiver Message HandlerCongratulationsAutomatically Send Message By …...
深度学习笔记——循环神经网络之LSTM
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络LSTM知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型(Bag of Words, BOW)工作…...
AI 模型评估与质量控制:生成内容的评估与问题防护
在生成式 AI 应用中,模型生成的内容质量直接影响用户体验。然而,生成式模型存在一定风险,如幻觉(Hallucination)问题——生成不准确或完全虚构的内容。因此,在构建生成式 AI 应用时,模型评估与质…...
[MILP] Logical Constraints 0-1 (Note2)
1. 如果选择了项目1,则项目2,3也要求被选中 表示为: 2. 如果确定了选项目1,则接下来必须选项目2或者项目3 表示为: or 3. 如果同时选择了项目2和项目3,则不可以选择项目1 表示为: 4. 如果…...
