Linux命令:对文本文件的内容进行排序的工具sort详解

news2024/9/20 22:39:25

目录

一、概述

二、用法

1、 基本语法

2、 常用选项

3、获取帮助

三、示例

1. 基本用法

2. 按数字排序

3. 按第二列排序

4. 逆序排序

5. 删除重复行

6. 忽略大小写排序

7. 按人类可读的数值排序

8. 按版本号排序

四、高级用法

 1. 与 uniq 结合使用去重

 2. 与 grep 结合使用过滤

 3. 与 awk 结合使用进行文本处理

 4. 综合示例:排序、去重、过滤和文本处理

 5. 使用 sort 的 -k 选项进行复杂排序

五、其他事项


一、概述

        sort 命令是 Linux 和 Unix-like 操作系统中一个非常有用的命令行工具,用于对文本文件中的行进行排序。它可以按照不同的标准对数据进行排序,包括字母顺序、数值大小、月份、随机顺序或者其他定制的方式对文本文件中的行进行排序。并提供了多种选项来定制排序过程。

         sort 命令非常灵活且强大,可以与其他命令管道配合使用,以完成各种复杂的文本处理任务。

二、用法

1、 基本语法

        sort [选项] [文件名]

        如果没有指定文件名,则默认从标准输入读取数据。

2、 常用选项

1). -n 或 --numeric-sort:

   - 按照数字进行排序,而不是按字母顺序。

2). -r 或 --reverse:

   - 逆序排序,即从大到小排列。

3). -k 或 --key:

   - 指定排序的关键字字段。例如 -k2 表示以第二列作为排序依据。

4). -t 或 --field-separator:

   - 指定字段分隔符。默认情况下,sort 使用空白字符(空格或制表符)作为分隔符。

5). -u 或 --unique:

   - 排序后删除重复的行。

6). -m 或 --merge:

   - 合并已排序的文件。

7). -d 或 --dictionary-order:

   - 字典排序,忽略大小写,并且区分连字符(-)和撇号(')。

8). -b 或 --ignore-case:

   - 忽略每行开头的空白字符。

9). -f 或 --ignore-case:

   - 排序时忽略大小写差异。

10). -o 或 --output:

    - 将排序结果输出到指定的文件。

11). -g 或 --general-numeric-sort:

    - 按照通用数值排序规则进行排序,可以识别带有逗号和点的数值。

12). -h 或 --human-sort:

    - 按照人类可读的格式对数值进行排序(例如 1K < 1024 < 2G)。

13). -V 或 --version-sort:

    - 按照版本号顺序进行排序。

14). -m 或 --merge:

    - 合并已经排序的文件,不进行排序。

15). -S 或 --buffer-size:

    - 指定用于排序的缓冲区大小。

3、获取帮助

        输入如下命令:

        Sort –-help

        出现如下图所示的帮助信息:

三、示例

1. 基本用法

        使用如下命令:

   echo -e "apple\nbanana\ncherry" | sort

        实际操作如下图所示:

2. 按数字排序

   使用如下命令:

   echo -e "100\n20\n3" | sort -n

   实际操作如下图所示:

3. 按第二列排序

        使用如下命令:

           echo -e "100 apple\n20 banana\n3 cherry" | sort -k2

        实际操作如下图所示:

4. 逆序排序

        使用如下命令:

        echo -e "apple\nbanana\ncherry" | sort -r

  

5. 删除重复行

   使用如下命令:

   echo -e "apple\napple\ncherry" | sort -u  

6. 忽略大小写排序

   使用如下命令:

   echo -e "Apple\napple\nBanana" | sort -f

   实际操作如下图所示:

7. 按人类可读的数值排序

        使用如下命令:

   echo -e "1K\n1024\n2G" | sort -h

  

8. 按版本号排序

   使用如下命令:

   echo -e "1.2.3\n2.0\n1.9" | sort -V  

四、高级用法

        sort 命令在 Linux 和 Unix 系统中常与其他文本处理命令结合使用,以实现更复杂的文本处理任务。以下是几个将 sort 与其他命令(如 uniq、grep、awk)结合使用的示例:

 1. 与 uniq 结合使用去重

        当想要去除文件中的重复行时,uniq 命令非常有用,但它只能去除连续出现的重复行。因此,常与 sort 命令结合使用,以确保所有重复行都是连续的。

        sort input.txt | uniq

        实际操作如下图所示:

从结果可以看出,这个命令首先对 file.txt 的行进行排序,然后使用 uniq 去除排序后的重复行。

 2. 与 grep 结合使用过滤

        grep 命令用于搜索文件中匹配指定模式的行。可以将 grep 与 sort 结合使用,先过滤出感兴趣的行,然后再进行排序。

        grep 'is' file.txt | sort

        实际操作结果如下图所示:

        这个命令从 file.txt 中搜索包含 'pattern' 的行,并对这些行进行排序。

 3. 与 awk 结合使用进行文本处理

        awk 是一个功能强大的文本处理工具,可以对文本进行复杂的分析和转换。可以将 awk 的输出传递给 sort,以对处理后的文本进行排序。

        awk '{print $2}' file.txt | sort

        这个命令使用 awk 打印 file.txt 中每行的第二个字段,并将这些字段传递给 sort 进行排序。

 4. 综合示例:排序、去重、过滤和文本处理

        假设有一个日志文件 log.txt,想提取出所有唯一的 IP 地址,并按字典顺序排序。

                awk '{print $1}' log.txt | sort | uniq

        这里,awk '{print $1}' log.txt 提取每行的第一个字段(假设它是 IP 地址),sort 对这些 IP 地址进行排序,uniq 去除排序后的重复 IP 地址。

 5. 使用 sort 的 -k 选项进行复杂排序

        如果需要根据文件中的多个字段进行排序,可以使用 sort 的 -k 选项。例如,有一个以逗号分隔的 CSV 文件,想先根据第一列(用户ID)排序,然后根据第二列(分数)进行次级排序。

        sort -t, -k1,1 -k2,2n users.csv

        这里,-t, 指定了字段分隔符为逗号,-k1,1 表示根据第一列排序,-k2,2n 表示在第一列相同的情况下,根据第二列(作为数字)进行次级排序。

这些高级用法示例展示了 sort 命令如何与其他文本处理命令结合使用,以完成各种复杂的文本处理任务。

五、其他事项

1、 当使用 sort 处理大型文件时,它可能会消耗大量内存。如果内存不足,sort 可能会使用外部排序算法,这会增加排序所需的时间。

2、如果需要对多个文件进行排序,可以使用 -m 选项来合并已排序的文件。

3、使用 -S 选项可以指定排序时使用的缓冲区大小,这有助于优化排序过程。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

不断挑战才有不断机遇!Eagle Trader等你来加入!

2024“Eagle Trader杯”全国职业交易联赛S1赛季已火热进行一个多月&#xff0c;吸引了超过355名交易员的积极参与&#xff01;目前&#xff0c;每天都有新的交易员踊跃报名参加&#xff01; 经过严格地交易考核&#xff0c;13名选手成功通过初试&#xff0c;正进入下一阶段的挑…

XILINX ZYNQ 7000 使用 FreeRTOS

XILINX 官方的SDK可以生成FreeRTOS 本文分为三个部分&#xff1a; 1.ZYNQ 7010 创建一个最小ZYNQ Processer系统&#xff0c;能够使用串口打印 2.使用SDK 创建一个FreeRTOS最小软件系统 3.浅析FreeRTOS最小软件系统 一&#xff1a;ZYNQ 7010 创建一个最小ZYNQ Processer系统&…

基于Linux系统离线安装oracle数据库

注意事项&#xff1a; 在安装的时候多次涉及root用户和oracle用户的切换&#xff0c;请注意区分&#xff0c;本文已明显 一、环境准备 1、关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld2、 禁用NetworkManager服务&#xff08;非必须&#xff09; [rootlocalhost …

信号与线性系统实验四 离散系统的时域及变换域分析

文章目录 一、实验目的二、实验内容与原理三、实验器材四、实验步骤五、实验数据及结果分析第一部分&#xff1a;离散时间信号的时域基本运算第二部分&#xff1a; 离散LTI系统的时域分析第三部分&#xff1a;离散LTI系统Z域分析 六、实验结论七、其他(主要是心得体会) 一、实验…

通信工程学习:什么是PON无源光网络

PON&#xff1a;无源光网络 PON&#xff08;Passive Optical Network&#xff0c;无源光纤网络&#xff09;是一种采用光分路器等无源光器件进行信号传输和分配的光纤接入技术。它利用光纤作为传输媒介&#xff0c;通过无源设备将光信号从中心局&#xff08;如光线路终端OLT&am…

Linux基础4-进程1(操作系统,进程介绍,Linux进程相关命令,getpid,fork)

上篇文章&#xff1a;Linux基础3-基础工具4&#xff08;git&#xff09;&#xff0c;冯诺依曼计算机体系结构-CSDN博客 本章重点&#xff1a; 1. 操作系统简介 2. 什么是进程&#xff1f; 3. 在Linux使用命令查看进程&#xff08;ps&#xff09; 4. getpid&#xff0c;getppid,…

卷积和相关

卷积和相关是两种运算关系(或过程),都是含参变量的无穷积分。都是两个函数通过某种运算得到另外一个函数。 卷积运算: 可用来表示一个观测系统或一个观 测仪器对输入信号的作用过程等。 相关运算:常用来比较两个函数的关联性,相似程度,用于信号检测,图像识别。如:在混…

SCSAI平台面向对象建模技术的设计和实现(1)

SCSAI平台面向对象建模技术的设计和实现&#xff08;1&#xff09; 原创 团长团 AI智造AI编程 2024年09月19日 20:09 北京 用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCSAI,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现…

【jupyter notebook】环境部署及pycharm连接虚拟机和本地两种方式

Python数据处理分析简介 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务数据分析领域里有海量开源库机器学习/深度学习领域最热门的编程语言在爬虫&#xff0c;Web开发等领域均有应用 与Excel&#xff0c;PowerBI&#xff0c;Tableau等软件比较 Excel有…

双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法&#xff1a; 最邻近插值 双线性插值 双立方&#xff08;三次卷积&#xff09;插值 其中效果最好的是双立方&#xff08;三次卷积&#xff09;插值&#xff0c;本文介绍它的原理以及使用 如果想先看效果和源码&#xff0c;可以拉到最底…

【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/abs/2405.14458 文章目录 论文小结论文简介论文方法为NMS-free训练的一致性双标签分配双标签分配一致性匹配度量 效率-精度整体驱动的模型设计效率驱动模型设计轻量级分类检测头Spatial-channel 解耦下采样Rank-guided block design 精度…

Vue3中的Pinia——管理应用程序的全局状态

介绍Pinia Pinia 是 Vue.js 的状态管理库&#xff0c;主要用于管理应用程序的全局状态。它是 Vuex 的替代品&#xff0c;提供了更简单和更灵活的 API。Pinia 的主要作用包括&#xff1a; 1. 状态管理&#xff1a;Pinia 允许你在应用中集中管理状态&#xff0c;方便不同组件之…

微服务以及注册中心

一、什么是微服务 微服务是指开发一个单个小型的但有业务功能的服务&#xff0c;每个服务都有自己的处理和轻量通讯机制&#xff0c;可以部署在单个或多个服务器上。微服务也指一种松耦合的、有一定的有界上下文的面向服务架构。也就是说&#xff0c;如果每个服务都要同时修改…

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.Youmayincreasethelimitbyauthenticatingandupgrading:https://www.docker.com/increase−rate−limit.See ′ dockerrun−−help 在拉取docker进行的时候遇到这个问题,如何解决呢?本文提供的解决方…

石英晶体谐振器:核心功能材料及其工作原理与应用

晶发电子专注17年晶振生产,晶振产品包括石英晶体谐振器、振荡器、贴片晶振、32.768Khz时钟晶振、有源晶振、无源晶振等&#xff0c;产品性能稳定,品质过硬,价格好,交期快.国产晶振品牌您值得信赖的晶振供应商。 石英晶体谐振器&#xff0c;又称为无源晶振&#xff0c;是现代电子…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

云平台在大规模设备管理和数据分析中的作用

在当代数字化转型的浪潮中&#xff0c;云平台作为信息技术基础设施的核心组件&#xff0c;扮演着无可替代的角色&#xff0c;尤其在大规模设备管理和数据分析领域&#xff0c;其重要性和影响力日益凸显。本文旨在深入探讨云平台如何通过其独特的优势&#xff0c;促进数据的高效…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题&#xff1a;在ROS项目中进行断点调试。 第一步&#xff1a;创建一个ROS项目或者打开一个现有的ROS项目。 第二步&#xff1a;修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…

11.第二阶段x86游戏实战2-找人物状态

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…