linux sort命令 排序,Linux sort排序方法[通俗易懂]

linux sort命令 排序,Linux sort排序方法[通俗易懂]在文件的操作过程中,因为文件过多,往往需要进行一下排序,排序方法也就是从小到大排序或者从大到小排序。比如我们从nginx日志中需要找到访问量最长的url,那就需要对请求时间进行一个排序,根据请求时间长短排序后在打印后面的url就能清楚的知道那个url有问题了,废话先不说,看方法:文件排序我们先说一下linux的sort命令,sort命令可以根据我们的需求完成从大到小或者从小到大的排序。注意:sor…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在文件的操作过程中,因为文件过多,往往需要进行一下排序,排序方法也就是从小到大排序或者从大到小排序。比如我们从nginx日志中需要找到访问量最长的url,那就需要对请求时间进行一个排序,根据请求时间长短排序后在打印后面的url就能清楚的知道那个url有问题了,废话先不说,看方法:

文件排序我们先说一下linux的sort命令,sort命令可以根据我们的需求完成从大到小或者从小到大的排序。注意:sort是针对文件内容,以行为单位来排序。先看一下sort命令格式:

sort [参数] file

参数详解:

-b 会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

-d:按照字典顺序排序,只支持字母、数值、空白。除了特殊字符,一般情况下基本等同于默认排序规则。

–debug:将显示排序的过程以及每次排序所使用的字段、字符。同时还会在最前几行显示额外的信息。

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

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

-u 只输出重复行的第一行,结合’-f’使用时,重复的小写会被丢弃。

-f 将所有小写转大写,和’-u’一起使用时,如果排序的比较结果相等,则丢弃小写字母行。

-M 会以月份来排序,比如JAN小于FEB等等

-n 依照数值排序,遇到不识别的字符立即结束该Key的排序。有字符串””或”\0″被当作空,该选项除了能识别负号”-“,其他所有非数字字符都不识别。

-o 将排序后的结果存入指定的文件。

-r 排序后的反序排列,不参与排序动作。

-s:禁止sort做”最后的排序”。

-t 指定排序时所用的栏位分隔字符。

-k 选择哪个列进行排序,如果有分隔符必须参考分隔符一起使用。

为了方便举例,我们先创建一个文件,然后针对文件根据上面的参数举例说明一下:

[root@localhost wulaoer]# cat wulaoer.txt

2 python3 800 Jan

1 Linux 1200 Mar

4 golong 800 Oct

6 DevOps 300 May

3 Ruby 200 Dec

5 redis 100 Sept

sort默认命令是从小到大排序,如果有多列根据第一列进行排序,如果第一列是IP地址,会根据IP地址的第一个字符进行排序。看下面的例子:

[root@localhost wulaoer]# sort wulaoer.txt

1 Linux 1200 Mar

2 python3 800 Jan

3 Ruby 200 Dec

4 golong 800 Oct

5 redis 100 Sept

6 DevOps 300 May

参数-n是根据第一列的数字从小到大排序。

[root@localhost wulaoer]# sort -n wulaoer.txt

1 Linux 1200 Mar

2 python3 800 Jan

3 Ruby 200 Dec

4 golong 800 Oct

5 redis 100 Sept

6 DevOps 300 May

参数-r是已经默认加了’-n’参数,根据第一列数字从大到小排序。

[root@localhost wulaoer]# sort -r wulaoer.txt

6 DevOps 300 May

5 redis 100 Sept

4 golong 800 Oct

3 Ruby 200 Dec

2 python3 800 Jan

1 Linux 1200 Mar

第一列和第二列之间有分隔符,所以使用参数$’\t’

[root@localhost wulaoer]# sort -t $’\t’ -k3 wulaoer.txt

5 redis 100 Sept

1 Linux 1200 Mar

3 Ruby 200 Dec

6 DevOps 300 May

2 python3 800 Jan

4 golong 800 Oct

这里的排序1200大于200排序错误,是因为默认安装字符集排序规则,所以需要加参数’-n’

[root@localhost wulaoer]# sort -t $’\t’ -k3 -n wulaoer.txt

5 redis 100 Sept

3 Ruby 200 Dec

6 DevOps 300 May

2 python3 800 Jan

4 golong 800 Oct

1 Linux 1200 Mar

使用’-M’参数,对英文月份进行排序。

[root@localhost wulaoer]# sort -t $’\t’ -k4 -M wulaoer.txt

2 python3 800 Jan

1 Linux 1200 Mar

6 DevOps 300 May

5 redis 100 Sept

4 golong 800 Oct

3 Ruby 200 Dec

在第二列的基础上进行排序,使用第三列决胜,且以数值排序规则对第三列排序。

[root@localhost wulaoer]# sort -t $’\t’ -k2 -k3 -n wulaoer.txt

5 redis 100 Sept

3 Ruby 200 Dec

6 DevOps 300 May

2 python3 800 Jan

4 golong 800 Oct

1 Linux 1200 Mar

之所以得到第三列排序整除,是因为在默认情况下,命令行中指定的排序行为结束后,sort会做最后一次排序,这最后一次排序是对整行按照完全默认规则进行,也就是按字符集,升序排序。如果第二行第三列有重复的会根据第一行的顺序排序。

上面第二列是字母不是数值,按数值排序时,字母是不可识别的字符,遇到不可识别的字符会立即结束该字段的排序。可以使用’–debug’选项来查看排序的过程和排序时所使用的列。注意只有在Centos7上使用。

[root@localhost wulaoer]# sort –debug -t $’\t’ -k3 -k2 -n wulaoer.txt

sort: using ‘en_US.UTF-8’ sorting rules

sort: key 1 is numeric and spans multiple fields

sort: key 2 is numeric and spans multiple fields

5>redis>100>Sept

___# 第1次排序行为,即对”-k3″排序,此次用于排序的字段为第3列

^ no match for key# 第2次排序行为,即对”-k2″排序,但显示无法匹配排序key

________________# 默认sort总会进行最后一次排序,排序对象为整行

3>Ruby>200>Dec

___

^ no match for key

______________

6>DevOps>300>May

___

^ no match for key

________________

2>python3>800>Jan

___

^ no match for key

_________________

4>golong>800>Oct

___

^ no match for key

________________

1>Linux>1200>Mar

____

^ no match for key

________________

在第三列数字排序规则的基础上,使用第二列作为决胜属性,且默认排序规则对此列降序排序。

[root@localhost wulaoer]# sort -t $’\t’ -k3n -k2r wulaoer.txt

5 redis 100 Sept

3 Ruby 200 Dec

6 DevOps 300 May

2 python3 800 Jan

4 golong 800 Oct

1 Linux 1200 Mar

vim排序

vim排序参数和sort排序参数是一样的,vim的排序也是在sort的基础上实现的,所以这里就不多说,没有vim需要安装,使用vim进入文件之后使用’shift+:’进入命令模式,在命令模式下执行直接修改文件,不保存不修改。

第4列数据进行排序

1,12!sort -r -n -k4.1,5

从当前行以下20行按字母顺序排序

:.,+20!sort

从第一行开始,以第三列进行排序

:4,$!sort -k 3

至此,Linux的排序基本用法已经完成,没有了看些其他的吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169872.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎样更改pycharm的项目默认保存路径_vscode怎么给python导入包

    怎样更改pycharm的项目默认保存路径_vscode怎么给python导入包 参考原文:https://blog.csdn.net/yggaoeecs/article/details/78378938  还有这篇,同时讲了anaconda的安装:https://blog.csdn.net/qq_29883591/article/details/78077244https://blog.csdn.net/qq_29883591/article/details/78…

    2022年8月27日
    5
  • sql存储过程实例详解_sql server创建存储过程

    sql存储过程实例详解_sql server创建存储过程问题提出  我使用过几次SQLServer,但所有与数据库的交互都是通过应用程序的编码来实现的。我不知到在哪里使用存储过程,也不了解实现存储过程需要做哪些工作。希望能详细说明。  存储过程是存储于数据库中的一组T-SQL语句。有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。另外,由于代码是存储在数据库

    2022年9月26日
    2
  • 微信公众号代理运营公司_多平台推广

    微信公众号代理运营公司_多平台推广最近公司项目需要切到微信服务号,但是公司内网环境需要开防火墙策略才能访问微信的开放API,实际上就是通过代理去访问。这里记录一下我通过代理去调用微信API遇到的坑及解决办法。

    2022年8月21日
    8
  • veriloghdl和vhdl比较_HDL语言

    veriloghdl和vhdl比较_HDL语言VHDL与VerilogHDL的不同点序号区别之处VHDLVerilog1文件的扩展名不一样.vhd.v2结构不一样包含库、实体、结构体。ENTITY实体名ISPORT(端口说明)END实体名;ARCHITECTURE结构体名OF实体名IS说明部分BEGIN赋值语句/元件语句/进程语句END结…

    2022年9月21日
    1
  • vue封装使用公共组件_vue组件封装思路

    vue封装使用公共组件_vue组件封装思路Vue组件的三要素1.props参数2.slot定制插槽3.event自定义事件基本组件开发创建一个.vue文件,其中包含template、script以及style:<template><divclass=”headComponent”>{{{msg}}</div></template><script>exportdefault{props:[‘data’,’type’],

    2022年9月23日
    2
  • Python贪吃蛇 (完整代码+详细注释+粘贴即食)

    Python贪吃蛇 (完整代码+详细注释+粘贴即食)代码#!/usr/bin/envpython#-*-coding:utf-8-*-#author:Wangdalitime:2021年1月24日16:08:44#python实现:贪吃蛇”’游戏玩法:回车开始游戏;空格暂停游戏/继续游戏;方向键/wsad控制小蛇走向”””思路:用列表存储蛇的身体;用浅色表示身体,深色背景将身体凸显出来;蛇的移动:仔细观察,是:身体除头和尾不动、尾部消失,头部增加,所以,新添加的元素放在列表头部、删除尾部元素;游戏结束判定策略:超出

    2022年5月15日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号