linux centos7 sort命令的学习与训练

sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。

sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。

在各类编程语言中,排序是一项避不开的话题。可以说都有sort这项操作、功能或命令。

linux生产环境中,sort命令常用于对统计日志中不同服务错误的数量进行排序。

一、sort的工作原理

sort将文件的每一行作为一个单位,相互比较,默认比较规则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。

更多情况下,sort读取每一行后按照指定的分隔符将每一行划分成多个字段,这些字段就是sort排序的对象。同时,sort可以指定按照何种排序规则进行排序,如按照当前字符集排序规则(这是默认排序规则)、按照字典排序规则、按照数值排序规则、按照月份排序规则、按照文件大小格式(k<M<G)。还可以去除重复行,指定降序或升序(默认)的排序方式。

默认的排序规则为字符集排序规则,通常几种常见字符的顺序为:"空字符串<空白字符<数值<a<A<b<B<...<z<Z",字典排序规则也如此。

语法:

        sort  [选项]  文件

说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。

二、常用排序

1、默认排序

a.排序时,默认是按每行/每个域的首字符排序,数字的优先级要大于字符的优先级;字符的优先级大于中文的优先级

b.缺省情况下以整行为关键字按ASCII字符顺序进行排序

c.不指定升序还是降序时,默认是升序

d.有多个域时,默认根据第1个域对数据记录进行排序,也可以用-k选项指定某个域进行排序。sort命令用1表示第1个域,用2表示第2个域,以此类推。

2、指定排序

a.不指定排序要求

        cat filename |sort

        sort filename

两种写法功能相同,效果一样。

b.按数值排序

在前面简单应用的基础上,加上选项-n。

        cat filename |sort -n

        sort -n filename

c.按中文拼音排序

bash仅支持按拼音对中文排序,不能按笔画排序。

其他软件可以支持中文按笔画排序,但需下载安装。

d.按指定分隔符指定域排序

这类排序应用比较多,也是最复杂的情况。主要是在sort命令中添加-t和-k选项。

3、反向排序

sort 的-r选项,是按照倒序输出,最终效果是倒序排序。

原理在于:先按要求排序,再反向输出!

虽然选项可以调整位置,写在前写在后,连接写,单独写,均可。但排序原则是:

-r  先默认排序,再反向输出

-nr 先按数字排序再反向输出

注意:"-r"不参与排序动作,只是操作排序完成后的结果

4、多列排序

一个文本文件是按行分隔,有多项记录。而每行又可以按指定分隔符分隔成多个域(有时称为字段、列)。多列排序主要是应用sort的-t选项和-k选项。

-t指定分隔符(或称间隔符)

默认分隔符是空格。可以通过-t":"指定其他分隔符。-t与":"之间可有可无空格;分隔符可加可不加""(当然也可用单引号''或不用'')。

常用分隔符有空格" "、冒号":"、分号";"、@#$\等等。

对于特殊符号(如制表符),可使用类似于-t $'\t'或-t 'ctrl+v,tab'(先按ctrl+v,然后按tab键)的方法实现。

-k用来指定列数

-k 选项的语法如下:

[FStart[.CStart]][Modifier][,[FEnd[.CEnd]][Modifier]]

这个语法格式包含两大部分,以逗号(,)分割为Start和End两部分;如果不设置End部分,那么就认为End被设定为行尾!

Start部分由三部分组成:

FStart指定以哪个部分排序,1就是以第一部分排序

CStart指定从指定部分的第几个字符开始排序

Modifier指定排序方式可以使用r、n等选项

5.排序其他排序功能

a.去重

sort的-u选项

        -u的作用就是在输出行中去重复

b.忽略大小写

sort常用选项

        -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

c.检查文件与合并文件

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-m 合并已排序的多个文件为一个文件

d.修改原文件

sort的-o选项

正常将sort的执行结果重定向到源文件会使源文件变为空。

但是加上-o就可以将排序后的结果重定向到源文件

三、实训案例

1. 不加任何选项排序

先准备训练素材:(各字符间用空格分隔)

cat  sort1.txt

xiaoli 25 2388

wangyuan 20 2388

xiaozi 25 3406

xiaohong 25 2387

xiaozi 25 3407

zhangyishan 24 5678

wangyuan 20 2386

guosan 25 3409

liyang 25 2385

wangyuan 20 2389

guosan 25 3405

liyang 25 2382

chensan 25 3402

liyang 25 2381

chensan 25 3404

执行sort命令:

        sort sort1.txt

由结果可知,排序结果按第一列进行升序排列。

2. 按第2列数值降序排序

选项-k2nr  其中k按指定列(域)排序,2指第2列,n指按数据排序,r指反向显示。

不设置分隔符,是按默认分隔符(空格)。

3.指定分隔符再排序

先准备以制表符分隔的文本素材sort2.txt

修改sort1.txt:sed 's/ /\t/g' sort1.txt >sort2.txt

查看一下修改效果:

指定制表符这种无法直接输入的特殊字符的方式是$'\t'。

4.多列排序与多项排序

编辑以分隔符.分隔的文本素材sort3.txt

192.168.3.1 00:0F:AF:81:19:1F

192.168.3.2 00:0F:AF:85:6C:25

192.168.3.3 00:0F:AF:85:70:42

192.168.2.20 00:0F:AF:85:55:DE

192.168.2.21 00:0F:AF:85:6C:09

192.168.2.22 00:0F:AF:85:5C:41

192.168.0.151 00:0F:AF:85:6C:F6

192.168.0.152 00:0F:AF:83:1F:65

192.168.0.153 00:0F:AF:85:70:03

192.168.1.10 00:30:15:A2:3B:B6

192.168.1.11 00:30:15:A3:23:B7

192.168.1.12 00:30:15:A2:3A:A1

192.168.1.1 00:0F:AF:81:19:1F

192.168.2.2 00:0F:AF:85:6C:25

192.168.3.3 00:0F:AF:85:70:42

192.168.2.22 00:0F:AF:85:5C:41

192.168.1.152 00:0F:AF:83:1F:65

192.168.0.153 CA:0F:AF:85:70:03

192.168.3.10 00:30:15:A2:3B:B6

192.168.1.11 00:30:15:A3:23:B7

192.168.3.12 00:30:15:A2:3A:A1

案例目标:按网段降序排序,相同时再按IP第4位升序排序。

分析素材:每行由几部分组成:前几位是IP地址,后面几位是MAC地址。

IP地址由.分隔四位数字,MAC地址由:分隔六位十六制数字,IP地址与MAC地址由空格分隔。

本案例设置-t.分隔符,对第3列和第4列分别排序。

按数值排序,用-n选项;降序用-r选项。进行两项排序时,可以设置两个-k选项,分别设置排序选项。

        sort -n -t. -k3,3r -k4,4.3 sort3.txt

        sort -n -u -t. -k3.3r -k4.1,4.3 sort3.txt

-k3,3从第三个字段开始排序,到第三个字段结束。

-k4,4.3从第四个字段的第一个字符开始排序,到第四个字段的第三个字符结束。

重点理解:逗点.后面紧跟的数字,在其中的这个含义:从逗点.前面数字所在域的第几个字符,开始。

-k 3.3 意思就是,从第3个域的第三个字符开始;同理 -k 4.1 就是从第4个域的第一个字符开始。

总结说明:

.是某个段的第几个字符。

,号前面默认是第一个字符,后面默认是到结尾,“,”是分隔字段的。

5.特殊事项

a.-t分隔符不能设置多个分隔符,就是一会只能设置一个分隔符。不象其他命令,如awk,可以设置多个分隔符。

b.如果文本文件中,空格处有多个空格,会影响-t的作用。需要提前处理。或者用tr –s ' ',或者用-b选项。

小结

sort命令是Linux系统一种排序工具,它将输入文件看作由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符为定界符。sort命令与awk类似,可将记录分成多个域来处理,默认的域分隔符是空格符,域分隔符也可由用户指定。

主要了解:sort命令的-r  -f选项

重点掌握:-t -n -o  -u  - k,尤其是-k。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python代理池健壮性测试 - 压力测试和异常处理

大家好&#xff01;在构建一个可靠的Python代理池时&#xff0c;除了实现基本功能外&#xff0c;我们还需要进行一系列健壮性测试来确保其能够稳定运行&#xff0c;并具备应对各种异常情况的能力。本文将介绍如何使用压力测试工具以及合适的异常处理机制来提升Python代理池的可…

《深度学习计算机视觉 》书籍分享(包邮送书三本)

深度学习计算机视觉介绍 随着计算机技术的发展和进步&#xff0c;计算机视觉领域得到了广泛的关注和研究。而深度学习作为一种强大的机器学习方法&#xff0c;已经成为计算机视觉领域的重要工具之一。本文将介绍深度学习在计算机视觉中的应用和取得的成果。 深度学习是一种模…

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…

Nginx入门——Nginx的docker版本和windows版本安装和使用 代理的概念 负载分配策略

目录 引出nginx是啥正向代理和反向代理正向代理反向代理 nginx的安装使用Docker版本的nginx安装下载创建挂载文件获取配置文件创建docker容器拷贝容器中的配置文件删除容器 创建运行容器开放端口进行代理和测试 Windows版本的使用反向代理多个端口运行日志查看启动关闭重启 负载…

机器学习之概率论

最近&#xff0c;在了解机器学习相关的数学知识&#xff0c;包括线性代数和概率论的知识&#xff0c;今天&#xff0c;回顾了概率论的知识&#xff0c;贴上几张其他博客的关于概率论的图片&#xff0c;记录学习过程。

Linux搭建SSLVpn

安装http、ssl服务 编辑http配置文件 修改http的136行&#xff0c;276行以及990行 1、136行将监听端口注释 2、276行和990行修改为自己的域名和要访问的端口 修改http文档最后那部分 新添ssl配置信息&#xff0c;将端口修改为443&#xff08;截图错了server.key应该放在/etc/…

第8步---MySQL的存储过程和触发器

第8步---MySQL的存储过程和触发器 1.存储过程 5开始支持的 sql集&#xff0c;类似Java中的代码中的方法 实现对sql的封装和服用 有输入和输出 可以声明变量 可以实现一下复杂的控制语句 1.1入门案例 基本语法 测试数据 -- 创建表的测试数据 create table dept(deptno int pri…

Python土力学与基础工程计算.PDF-土的三项组成

5.3 Python求解 Python 求解代码如下&#xff1a; 1. # 定义已知参数 2. G_s 2.7 # 比重 3. w 0.2 # 含水量 4. e 0.6 # 孔隙比 5. gamma_w 9.81 # 水的重度 6. 7. # 根据公式计算饱和度 8. S_r G_s * w / e 9. print("饱和度为", S_r) 10. 11.…

JVM核心原理解读(一)---执行引擎

Java虚拟机规范制定了Java字节码执行引擎的概念模型,Java执行引擎作用概括起来就是执行编译产生的Java class文件,为用户提供了底层OS的调用,屏蔽了不同平台硬件和OS的差异性,使得编写的代码无差别的在各个平台运行; JVM运行时内存结构 运行时栈帧 局部变量表---方法的局部变…

创建git项目并提交

1.创建仓库 2.点击创建 3复制gitee码云的HttpS连接 4 提交上传 打开项目并点击菜单栏上的【CVS】–》【Import into version control】–》【Create Git Repository】创建本地仓库 在打开的【Create Git Repository】对话框内选择本地仓库的位置&#xff0c;这里我选择…

java八股文面试[数据结构]——Map有哪些子类

知识来源&#xff1a; 【23版面试突击】 用过哪些Map类&#xff0c;都有什么区别&#xff0c;HashMap是线程安全的吗&#xff1f;_哔哩哔哩_bilibili https://www.cnblogs.com/bubbleboom/p/12694013.html

RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估

前言 上一期讲到YCSB在RISC-V服务器上对MySQL进行性能测试&#xff08;RISC-V公测平台发布 使用YCSB测试SG2042上的MySQL性能&#xff09;&#xff0c;在这一期文章中&#xff0c;我们继续深入讨论RISC-V数据库的应用。本期就继续利用HS-2平台来测试数据库软件在RISC-V服务器…

HarmonyOS ArkUI 属性动画入门详解

HarmonyOS ArkUI 属性动画入门详解 前言属性动画是什么&#xff1f;我们借助官方的话来说&#xff0c;我们自己简单归纳下 参数解释举个例子旋转动画 位移动画组合动画总结 前言 鸿蒙OS最近吹的很凶&#xff0c;赶紧卷一下。学习过程中发现很多人吐槽官方属性动画这一章比较敷…

CSS 盒子模型

前言 盒子模型-组成 CSS盒子模型是一种用来描述元素在页面布局中占据空间的模型。它将每个元素看作由内容区域、内边距、边框和外边距组成的一个矩形框。 盒子模型的组成部分包括&#xff1a; 内容区域&#xff08;Content&#xff09;&#xff1a;显示元素的实际内容&#xf…

商城的TPS与并发用户数是如何换算的?

商城的TPS与并发用户数的换算关系可以通过以下公式计算&#xff1a; TPS 并发用户数 / 平均事务响应时间 其中&#xff0c;平均事务响应时间是指系统处理一个事务所需的平均时间。 下面是商城性能测试的一些用例示例&#xff1a; 用户登录&#xff1a; 目标&#xff1a;测…

Docker的革命:容器技术如何重塑软件部署之路

引言 在过去的几年中&#xff0c;容器技术已经从一个小众的概念发展成为软件开发和部署的主流方法。Docker&#xff0c;作为这一变革的先驱&#xff0c;已经深深地影响了我们如何构建、部署和运行应用程序。本文将探讨容器技术的起源&#xff0c;Docker如何崛起并改变了软件部…

centos7安装MySQL8

Centos7安装MySQL8 MySQL版本&#xff1a;8.0.34 1.安装前准备 &#xff08;1&#xff09;查看是否安装mariadb [rootkb135 ~]# rpm -qa|grep mariadb &#xff08;2&#xff09;卸载mariadb并检查是否卸干净 [rootkb135 ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x8…

vue 简单实验 v-on html事件绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"event-handling"><p>{{ message }}</p><button v-on:click"reverseMessage">反转 Message</but…

Selenium环境+元素定位大法

selenium 与 webdriver Selenium 是一个用于 Web 测试的工具&#xff0c;测试运行在浏览器中&#xff0c;就像真正的用户在手工操作一样。支持所有主流浏览器 WebDriver 就是对浏览器提供的原生API进行封装&#xff0c;使其成为一套更加面向对象的Selenium WebDriver API。 使…

限制立方样条(RCS)中的P for overall和P for nonlinear的计算

最近不少人私信我&#xff0c;说有些SCI文章报了两个P值一个是P for overall,一个是P for nonlinear,就像下图这样&#xff0c;问我P for overall怎么计算。 P for overall我也不清楚是什么&#xff0c;有些博主说这个是总效应的P值&#xff0c;但是我没有找到相关出处。但是怎…