当前位置: 首页 > news >正文

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 会按照升序排列,即从小到大、从 AZ。也可以通过 -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”&#xff0c;表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件&#xff08;没有指定文件或指定文件为 - 时读取标准输入&#xff09;内容&#xff0c;并按照…...

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一个优秀的基于 Java 的持久框架&#xff0c;内部对 JDBC 做了封装&#xff0c;使开发者只需要关注 SQL 语句&#xff0c;而不关注 JDBC 的代码&#xff0c;使开发变得更加的简单MyBatis 通…...

选择困难?直接生成pynput快捷键字符串

from pynput import keyboard# 文档&#xff1a;https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码)&#xff1a;https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制)&#xff1a;https:/…...

DeepSeek-R1:强化学习驱动的推理模型

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

国内优秀的FPGA设计公司主要分布在哪些城市?

近年来&#xff0c;国内FPGA行业发展迅速&#xff0c;随着5G通信、人工智能、大数据等新兴技术的崛起&#xff0c;FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此&#xff0c;国内优秀的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 拉&#xff0c;拽&#xff0c;拖 He tugged the door open with all his might…...

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置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 &#xff0c;文末自助获取源码 \color{red}{T166&#xff0c;文末自助获取源码} T166&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程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数据库连接数上限&#xff0c;需要修改配置文件里maxclients参数&#xff0c;修改后需重启数据库 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单片机开发:点阵屏显示数字

实验目标&#xff1a;在8x8的点阵屏上显示数字0。 点阵屏的原理图如下图所示&#xff0c;点阵屏的列接在P0端口&#xff0c;行接在74HC595扩展的DP端口上。 扩展口的使用详见&#xff1a;51单片机开发&#xff1a;IO扩展(串转并)实验-CSDN博客 要让点阵屏显示数字&#xff0…...

mysql DDL可重入讨论

mysql的bug&#xff1a;当执行 MySQL online DDL 时&#xff0c;期间如有其他并发的 DML 对相同的表进行增量修改&#xff0c;比如 update、insert、insert into … on duplicate key、replace into 等&#xff0c;且增量修改的数据违背唯一约束&#xff0c;那么 DDL 最后都会执…...

DAY01 面向对象回顾、继承、抽象类

学习目标 能够写出类的继承格式public class 子类 extends 父类{}public class Cat extends Animal{} 能够说出继承的特点子类继承父类,就会自动拥有父类非私有的成员 能够说出子类调用父类的成员特点1.子类有使用子类自己的2.子类没有使用,继承自父类的3.子类父类都没有编译报…...

127周一复盘 (165)玩法与难度思考

1.上午测试&#xff0c;小改了点东西&#xff0c; 基本等于啥也没干。 匆忙赶往车站。 从此进入春节期间&#xff0c;没有开发&#xff0c;而思考与设计。 2.火车上思考玩法与难度的问题。 目前的主流作法实际上并不完全符合不同玩家的需求&#xff0c; 对这方面还是要有自…...

【C语言常见概念详解】

目录 -----------------------------------------begin------------------------------------- 什么是C语言&#xff1a; 1. 基本数据类型 2. 变量与常量 3. 运算符与表达式 4. 控制结构 5. 函数 6. 指针 7. 数组与字符串 8. 结构体与联合体 9. 文件操作 结语 ----…...

弹性分组环——RPR技术

高频考点&#xff0c;考查20次&#xff1a; RPR与FDDI一样使用双环结构RPR环中的每一个节点都会执行SRP公平算法&#xff08;非DPT、MPLS&#xff09;传统的FDDI环&#xff0c;当源节点成功向目的结点发送一个数据帧后&#xff0c;这个数据帧由源结点从环中回收。但RPR环&#…...

定制Centos镜像

环境准备&#xff1a; 一台最小化安装的干净的系统&#xff0c;这里使用Centos7.9,一个Centos镜像&#xff0c;镜像也使用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不是素数 目录 方法一:暴力法 方法二:除二法(优化) 方法三.根号法(最优法) 方法一:暴力法 最简单最暴力的方法就是根据定义&#xff0c;判断n是不是素数,让n除以2到n-1的所有数,只要遇到能除开…...

多级缓存(亿级并发解决方案)

多级缓存&#xff08;亿级流量&#xff08;并发&#xff09;的缓存方案&#xff09; 传统缓存的问题 传统缓存是请求到达tomcat后&#xff0c;先查询redis&#xff0c;如果未命中则查询数据库&#xff0c;问题如下&#xff1a; &#xff08;1&#xff09;请求要经过tomcat处…...

代理模式 - 代理模式的应用

引言 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用&#xff0c;从而可以在不改变目标对象的情况下&#xff0c;增加额外的功能或控…...

编辑器Vim基本模式和指令 --【Linux基础开发工具】

文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...

云计算如何与物联网(IoT)结合?

今天我们来聊一个既酷炫又实用的话题&#xff1a;云计算如何给物联网插上腾飞的翅膀。 智能时代的技术密码 想象一下&#xff0c;你家的冰箱会自动帮你订购即将用完的牛奶&#xff0c;工厂的机器能预测何时需要维修&#xff0c;城市的路灯会根据实时交通流量调整亮度。这些看…...

C#面试常考随笔4:int? 和 int的区别,以及int?的运用场景?

可空性 int?&#xff1a;它是int的可空类型&#xff0c;允许将null赋值给该变量。int?实际上是Nullable<int>的缩写形式&#xff0c;是一个可以为null的整数类型。例如&#xff1a;int? num2 null;或者int? num3 10;都是合法的。 内存分配与存储 int?&#xff…...

DeepSeek-R1试用

最近DeepSeek太火了&#xff0c;对配置要求不高。刚好放假&#xff0c;下载试试。发现开源大模型的生态做的挺好的&#xff0c;几分钟就能在本地部署一个大模型。 配置 NVIDIA RTX 2060 6GB&#xff08;最低要求 NVIDIA GTX 1060 6GB &#xff09; 下载Ollama Ollama是一个…...

Vue 3 30天精进之旅:Day 06 - 表单输入绑定

引言 在前几天的学习中&#xff0c;我们探讨了事件处理的基本概念及其在Vue中的应用。今天&#xff0c;我们将进一步了解Vue的表单输入绑定。这是构建用户交互式应用的核心部分&#xff0c;使得我们能够方便地处理用户输入并实时更新数据。本文将介绍如何在Vue中实现单向和双向…...

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词&#xff1a; 从系统的角度&#xff0c;麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的&#xff1a; 都有&#xff1a;内在看不见的规律、外在显性各种现象 都是&#xff1a;输入、处理、输出 都是&#xff1a;静态、要素、组成、结构、组织…...

使用C#对指定的MYSQL数据库进行备份以及常见问题

最近在开发过程中&#xff0c;需要做个MYSQL数据库的备份&#xff0c;大致总结了一下代码&#xff0c;以及常见的坑 string bakName "database" DateTime.Now.ToString("yyyyMMddHHmmss") ".sql";//备份后的数据库文件名var bakupFilePath &q…...

探索人工智能在计算机视觉领域的创新应用与挑战

一、引言 1.1 研究背景与意义 在科技飞速发展的当下&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;已然成为引领新一轮科技革命和产业变革的重要驱动力。作为 AI 领域的关键分支&#xff0c;计算机视觉&#xff08;Computer Vision, CV&#xff0…...

Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)

概述 在现代互联网应用中&#xff0c;网络请求和响应是服务交互的核心。对于开发者和测试人员来说&#xff0c;能够准确捕获并分析这些请求&#xff0c;是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具&#xff0c;不仅可以捕获普通的HTTP请求&#xff0c;还…...