linux centos7 sort命令的学习与训练

news2024/11/25 16:51:40

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.coloradmin.cn/o/922777.html

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

相关文章

Centos7防火墙启动失败问题

下面记录一下防火墙启动失败问题排查和解决的过程。防火墙启动失败的错误信息如下&#xff1a; ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied: Conn...n file 比较郁闷的地方是之前防火墙是正常启动的&#xff0c;后面不知道服务器修改了什么配置…

[MyBatis系列②]Dao层开发的两种方式

目录 1、传统开发 1.1、代码 1.2、存在的问题 2、代理开发 2.1、开发规范 2.2、代码 ⭐mybatis系列①&#xff1a;增删改查 1、传统开发 传统的mybatis开发中&#xff0c;是在数据访问层实现相应的接口&#xff0c;在实现类中用"命名空间.id"的形式找到对应的映…

ARM汇编【5】:STACK AND FUNCTIONS

在这一部分中&#xff0c;我们将研究称为堆栈的进程的一个特殊内存区域。本章介绍了Stack的用途和相关操作。此外&#xff0c;我们还将介绍ARM中函数的实现、类型和差异。 STACK 一般来说&#xff0c;堆栈是程序/进程中的一个内存区域。这部分内存是在创建进程时分配的。…

《信息安全技术 数据安全风险评估方法》(征求意见稿)解读

8月21日&#xff0c;全国信息安全标准化技术委员会秘书处发布关于征求国家标准《信息安全技术 数据安全风险评估方法》&#xff08;征求意见稿&#xff09;意见的通知&#xff0c;面向社会广泛征求意见。 一、数据安全相关政策法规 此前&#xff0c;国家也发布了多部数据安全相…

dockerfile镜像及Harbor私有仓库搭建的应用

目录 搭建私有仓库harbordockerfile构建镜像1&#xff0c;先创建一个目录2&#xff0c;编写dockerfile3&#xff0c;构建4&#xff0c; 验证镜像5&#xff0c;标记镜像6&#xff0c;上传镜像 搭建私有仓库harbor 首先安装容器编排工具&#xff1a;docker compose 我使用的是离…

企业如何做好实施数字工厂管理系统前的需求分析

随着工业4.0的到来&#xff0c;数字工厂系统解决方案已经成为企业提高生产效率、优化资源配置和提升产品质量的重要工具。在考虑实施数字工厂管理系统之前&#xff0c;企业需要进行详细的需求分析&#xff0c;以确保系统的实施能够真正满足企业的业务需求。本文将探讨企业如何做…

基于Spark框架的新闻推荐系统的设计与实现

1.摘要 离线ALS算法,以及基于内容的推荐算法进行结合.实时计算部分,使用Spark平台上的Spark Streaming流处理技术,处理日志收集框架Flume收集的日志信息. 2.需要的技术 jieba分词工具 LDA分词处理技术 LDA(Latent Dirichlet Allocatio

Java“牵手”天猫店铺所有商品API接口数据,通过店铺ID获取整店商品详情数据,天猫API申请指南

天猫商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。天猫商品详情可以帮助消费者更好的了解宝贝信息&#xff0c;从而做出购买决策。同时&#xff0c;消费者也可以通过商品详情了解其他买家对宝贝的评价&#xf…

一些总结C++(2)

1.windwos 不推荐使用redis 强行使用的话&#xff0c;可以用这个 hiredis-for-windowshttps://gitee.com/yokel007/hiredis-for-windows 使用方法&#xff1a;编译静态库。然后将所有文件作文C 包含目录&#xff0c;静态库作为库目录&#xff0c;然后添加链接。 不要使用wi…

海思Hi3861L开发三-新建自定义项目

一、简介 上一篇文章,介绍了如何下载安装SDK,并且编译和下载。但都是基于SDK原生提供的demo。那本节我们就来介绍一下,如果创建一个自己的项目。 二、新建目录结构 先看SDK提供的目录结构,如下图: 因为是基于应用的开发,所以我们只关注app这个文件夹。可以看到…

CentOS7.9安装docker服务,配置镜像加速器

目录 一、安装docker服务 二、配置镜像加速器 三、下载系统镜像&#xff08;Ubuntu、 centos &#xff09; 四、基于下载的镜像创建两个容器&#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母 &#xff09; 五、容器的启动、 停止及重启操作 六、查看正在…

2023国赛数学建模思路 - 案例:随机森林

文章目录 1 什么是随机森林&#xff1f;2 随机深林构造流程3 随机森林的优缺点3.1 优点3.2 缺点 4 随机深林算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff…

启动audit服务报错

启动centos audit服务报错 错误信息 $service auditd restart Stopping logging: [FAILED] Redirecting start to /bin/systemctl start auditd.service Job for auditd.service failed because the control process exited with error code. See “systemctl status auditd.s…

Matlab进阶绘图第26期—双向堆叠图

双向堆叠图是一种特殊的堆叠图&#xff0c;其通过在两个方向构建堆叠图&#xff0c;从而可以对两种类别的同名及综合属性进行全方位的比较。 由于Matlab中未收录双向堆叠图的绘制函数&#xff0c;因此需要大家自行设法解决。 本文分享一个简单的双向堆叠图的绘制方法&#xf…

Vue3二维码生成

目录 qrcode.vue 快速开始 使用 全部代码 qrcode.vue https://github.com/scopewu/qrcode.vue/blob/main/README-zh_cn.mdhttps://github.com/scopewu/qrcode.vue/blob/main/README-zh_cn.md ⚠️ 如果你正在使用 Vue 3&#xff0c;请升级 qrcode.vue 到 3.x; &#x1f5…

elementUI moment 年月日转时间戳 时间限制

changeStartTime(val){debuggerthis.startT val// this.startTime parseInt(val.split(-).join())this.startTime moment(val).unix() * 1000 //开始时间毫秒if(this.endTime){this.endTime moment(this.endT).unix() * 1000 //结束时间毫秒if(this.startTime - this.endTi…

上海亚商投顾:创业板指反弹大涨1.26% 核污染概念股午后全线走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日集体反弹&#xff0c;沪指午后冲高回落&#xff0c;创业板指盘中涨超2%&#xff0c;尾盘涨幅也有所收…

Jsp 解决out.print()输出多出空行

一、原因 在 JSP 中&#xff0c;HTML 标签和 JSP 指令之外的内容会被当作文本处理&#xff0c;包括空行、空格和制表符等。当 JSP 引擎解析 JSP 页面时&#xff0c;会将这些文本内容原封不动地输出到响应中。 http响应 二、解决方法 在Jsp页面最前端添加 <% page trimDir…

国标视频云服务EasyGBS国标平台与海康4200平台级联后不能播放的问题解决方法

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

如何使用自动化测试工具Selenium?

哈喽&#xff0c;大家好&#xff0c;我是小浪。那么有一段时间没有更新了&#xff0c;还是在忙实习和秋招的事情&#xff0c;那么今天也是实习正式结束啦&#xff0c;开始继续更新我们的学习博客&#xff0c;后期主要是开发和测试的学习博客内容巨多&#xff0c;感兴趣的小伙伴…