• shell学习(5)- sort


    Linux sort命令用于将文本文件内容加以排序。

    sort可针对文本文件的内容,以行为单位来排序。

    参数如下:

    -b 忽略每行前面开始出的空格字符。
    -c 检查文件是否已经按照顺序排序。
    -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
    -f 排序时,将小写字母视为大写字母。
    -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
    -m 将几个排序好的文件进行合并。
    -M 将前面3个字母依照月份的缩写进行排序。
    -n 依照数值的大小排序。
    -o<输出文件> 将排序后的结果存入指定的文件。
    -r 以相反的顺序来排序。
    -k 指定以哪一列来排序。
    -u 去重。
    -t<分隔字符> 指定排序时所用的栏位分隔字符。 +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。 --help 显示帮助。 --version 显示版本信息。

    1.sort直接用就可以对文件进行排序

    准备测试文件
    [root@www ~]$ cat sorttest.txt
    hello
    java
    php
    world
    betty
    php
    
    [root@www ~]$ sort sorttest.txt
    betty
    hello
    java
    php
    php
    world

    2.sort -u的选项是去重,在输出行中去除重复行

    [root@www ~]$ sort -u sorttest.txt
    betty
    hello
    java
    php
    world

    3.sort -n 选项是按照数值大小排序,这样就不会出现10出现在2之前了

    准备个文件
    [root@www ~]$ cat num.txt
    8
    9
    1
    2
    10
    20
    
    如果直接排序,结果如下
    [root@www ~]$ sort num.txt
    1
    10
    2
    20
    8
    9
    
    要想按照数值大小排序,需要加-n选项
    [root@www ~]$ sort -n num.txt
    1
    2
    8
    9
    10
    20

    4.sort -o 选项把结果输出到指定文件中,用重定向命令也是可以的

    [root@www ~]$ sort -n -o test num.txt
    [root@www ~]$ cat test
    1
    2
    8
    9
    10
    20
    
    或者直接如下
    [root@www ~]$ sort -n num.txt  > test
    [root@www ~]$ cat test
    1
    2
    8
    9
    10
    20

    5.sort的-t选项指定分隔符

    这个文件有三列,列与列之间用“-”隔开了,第一列表示年,第二列表示月,第三列表示日。那么我想以月来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

    准备文件
    [root@www ~]$ cat date
    2018-12-22
    2016-11-11
    2017-04-11
    2019-08-07
    
    如果直接排序的话,结果如下
    [root@www ~]$ sort date
    2016-11-11
    2017-04-11
    2018-12-22
    2019-08-07
    
    如果以第二列月份排序的话,如下
    [root@www ~]$ sort -n -k2 -t'-' date
    2017-04-11
    2019-08-07
    2016-11-11
    2018-12-22

    6.sort -k选项是指定以哪一列来排序

    准备测试文件如下
    [root@www ~]$ cat company
    facebook 50 5000
    alibaba 100 3000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000
    
    如果直接排序,是以第一列的字母排序
    [root@www ~]$ sort company
    alibaba 100 3000
    baidu 150 2000
    facebook 50 5000
    google 200 1000
    tengxun 80 4000
    
    第一列排序还可以指定第一列
    [root@www ~]$ sort -k1 company
    alibaba 100 3000
    baidu 150 2000
    facebook 50 5000
    google 200 1000
    tengxun 80 4000
    [root@www ~]$ sort -k1 -t' ' company
    alibaba 100 3000
    baidu 150 2000
    facebook 50 5000
    google 200 1000
    tengxun 80 4000
    
    如果以第二列数值大小排序
    [root@www ~]$ sort -k2n -t' ' company
    facebook 50 5000
    tengxun 80 4000
    alibaba 100 3000
    baidu 150 2000
    google 200 1000

    改下文件,如果第二列相同,按第三列大小排序,如何操作?

    [root@www ~]$ cat company
    facebook 50 5000
    alibaba 50 3000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000
    
    [root@www ~]$ sort -k2n -t' ' -k3n company
    alibaba 50 3000
    facebook 50 5000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000

    如果第二列相同,第三列降序排序,如何操作呢?

    [root@www ~]$ sort -k2n -t' ' -k3nr company
    facebook 50 5000
    alibaba 50 3000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000

    如果-k 和 -u 联合使用,有什么效果呢?

    [root@www ~]$ sort -n -k2 company
    alibaba 50 3000
    facebook 50 5000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000
    
    [root@www ~]$ sort -n -k2  -u company
    facebook 50 5000
    tengxun 80 4000
    baidu 150 2000
    google 200 1000

    发现第二列相同的alibaba删除掉了

    7.sort -M选项,按月份的前三个缩写字母来排序

    [root@www ~]$ cat month
    DEC
    JAN
    NOV
    AUG
    MAY
    
    [root@www ~]$ sort -M month
    JAN
    MAY
    AUG
    NOV
    DEC

    8.sort -r选项是逆序排列

    [root@www ~]$ cat sorttest.txt
    hello
    java
    php
    world
    betty
    php
    
    [root@www ~]$ sort -r  sorttest.txt
    world
    php
    php
    java
    hello
    betty

     9.以tab分隔排序

    cat a.txt | sort -nrk9 -t $'	'
  • 相关阅读:
    UIWebView控件中 字体大小和字体样式的修改
    IOS statusBarStyle 设置
    SSZipArchive解压失败的原因
    uiimageview 的 animation 动画
    App网络管理
    系统日志输出工具类
    软键盘管理
    获取App应用信息
    Activity管理类
    SharePreference工具类
  • 原文地址:https://www.cnblogs.com/kumufengchun/p/10162357.html
Copyright © 2020-2023  润新知