sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。

    一、sort 排序
    sort命令用于 对文本文件内容,以行为单位来排序。
    sort命令以空格作为字段分隔符,将一行分割为多个关键字对文件进行排序。
    需要注意的是除非你将输出重定向到文件中,否则sort命令并不对文件内容进行实际的排序(即文件内容没有修改),只是将文件内容按有序输出。
    1、语法
    sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][—help][—verison][文件]
    1
    2、参数说明
    参数 说明
    -m 将几个排序好的文件进行合并。
    -u 内容去重
    -n 依照数值的大小排序,升序排列。
    -o<输出文件> 将排序后的结果存入指定的文件。
    -r 以相反的顺序来排序。
    -t<分隔字符> 指定排序时所用的栏位分隔字符。
    -k<指定排序的列数> 指定要排序的列数,默认是从第一列开始比较,-k可指定某一列,也可与-t 结合使用时,代表某一栏
    +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
    3、实例
    (1)对文件进行升序排序

    sort testfile
    以行为单位,相互比较,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
    注意:原文件内容并未被修改!
    1
    2
    3

    (2)对文件进行升序排序,并去除重复行 sort -u

    sort -u 1.txt
    1

    可以看出:

    sort -u是先对内容进行排序,然后再去重(实际也是去除了相邻的重复行)。

    而uniq不能实现排序,只能去除相邻的重复行,所以要跟sort合并使用,先用sort排序,再用uniq去重

    sort 1.txt | uniq:
    1

    (3)按数值大小降序排列后,把结果再输出到原文件中 -o(直接用重定向做不到)

    sort -nr num.txt -o num.txt
    1
    (4)使用sort的-t选项和-k选项,设置间隔符后再指定排序的列

    如上图所示,对年月日的日期进行排序,直接使用sort dat.txt时,会按列从左到右来排序;

    sort -t’-‘ -k2 dat.txt
    # 其中-t’-‘ 是以 ‘-’ 为分隔符对每行内容分栏,然后-k 2 表示对分栏后的第二栏内容进行默认的升序排列。
    1
    2
    (5)使用sort -k指定以某一列排序

    sort -k9 a.txt
    (基于a.txt的第九列来排序)
    1
    2
    (6)sort命令并非仅能对文件进行排序,我们还可以通过管道将命令的输出内容重定向到sort命令中

    ls -l /home/$USER | sort -nk5
    1
    (7)对/etc/passwd以‘:’分隔,再以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

    cat /etc/passwd | sort -t’:’ -k 6.2,6.4 -k 1r
    sync:x:4:65534:sync:/bin:/bin/sync
    proxy:x:13:13:proxy:/bin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
    ————————————————
    版权声明:本文为CSDN博主「媛测」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lijing742180/article/details/84674928