• Linux sort命令的注意点


    正常情况

    • 测试数据
    [root@centos7-18 test]# ls 
    1  10  2  3  4  5  6  7  8  9  a  b  c  d  test2
    

    可以看到,以字典序排序,字母比数字的值要大

    • 使用sort -n进行按照数值排序
    [root@centos7-18 test]# ls |sort -n
    a
    b
    c
    d
    test2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    可以看到,以数值排序,数字比字母的值要大

    • 按照数值排序之后,再逆序
    [root@centos7-18 test]# 
    [root@centos7-18 test]# ls |sort -nr
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    test2
    d
    c
    b
    a
    

    结果正常

    特殊情况

    • 构造数据
    [root@centos7-18 test2]# touch database-2019-06-01_0300.tar.gz    database-2019-04-01_0300.tar.gz    database-2019-04-15_0300.tar.gz    database-2019-05-01_0300.tar.gz    database-2019-05-15_0300.tar.gz    database-2019-08-15_0300.tar.gz database-2019-06-15_0300.tar.gz database-2019-07-01_0300.tar.gz database-2019-07-15_0300.tar.gz database-2019-08-01_0300.tar.gz database-2019-09-20_0300.14.tar.gz database-2019-09-01_0300.tar.gz     database-2019-09-15_0300.9.tar.gz   database-2019-09-18_0300.12.tar.gz  database-2019-09-19_0300.13.tar.gz  database-2019-09-21_0300.15.tar.gz database-2019-09-22_0300.16.tar.gz database-2019-09-23_0300.17.tar.gz database-2019-09-24_0300.18.tar.gz
    
    • 查看数据
    [root@centos7-18 test2]# ls
    database-2019-04-01_0300.tar.gz  database-2019-06-15_0300.tar.gz  database-2019-09-01_0300.tar.gz     database-2019-09-21_0300.15.tar.gz
    database-2019-04-15_0300.tar.gz  database-2019-07-01_0300.tar.gz  database-2019-09-15_0300.9.tar.gz   database-2019-09-22_0300.16.tar.gz
    database-2019-05-01_0300.tar.gz  database-2019-07-15_0300.tar.gz  database-2019-09-18_0300.12.tar.gz  database-2019-09-23_0300.17.tar.gz
    database-2019-05-15_0300.tar.gz  database-2019-08-01_0300.tar.gz  database-2019-09-19_0300.13.tar.gz  database-2019-09-24_0300.18.tar.gz
    database-2019-06-01_0300.tar.gz  database-2019-08-15_0300.tar.gz  database-2019-09-20_0300.14.tar.gz·
    
    • 以. 为分隔,按照第二列进行排序,采用字典序排序
    [root@centos7-18 test2]# ls |sort -t. -k2
    database-2019-09-18_0300.12.tar.gz
    database-2019-09-19_0300.13.tar.gz
    database-2019-09-20_0300.14.tar.gz
    database-2019-09-21_0300.15.tar.gz
    database-2019-09-22_0300.16.tar.gz
    database-2019-09-23_0300.17.tar.gz
    database-2019-09-24_0300.18.tar.gz
    database-2019-09-15_0300.9.tar.gz
    database-2019-04-01_0300.tar.gz
    database-2019-04-15_0300.tar.gz
    database-2019-05-01_0300.tar.gz
    database-2019-05-15_0300.tar.gz
    database-2019-06-01_0300.tar.gz
    database-2019-06-15_0300.tar.gz
    database-2019-07-01_0300.tar.gz
    database-2019-07-15_0300.tar.gz
    database-2019-08-01_0300.tar.gz
    database-2019-08-15_0300.tar.gz
    database-2019-09-01_0300.tar.gz
    

    可以看到,先分隔,再指定某列进行按照字典序排序,此时字母比数字大,现象是正常的

    • 以. 为分隔,按照第二列进行排序,并且采用数值排序
    [root@centos7-18 test2]# ls |sort -t. -k2n
    database-2019-04-01_0300.tar.gz
    database-2019-04-15_0300.tar.gz
    database-2019-05-01_0300.tar.gz
    database-2019-05-15_0300.tar.gz
    database-2019-06-01_0300.tar.gz
    database-2019-06-15_0300.tar.gz
    database-2019-07-01_0300.tar.gz
    database-2019-07-15_0300.tar.gz
    database-2019-08-01_0300.tar.gz
    database-2019-08-15_0300.tar.gz
    database-2019-09-01_0300.tar.gz
    database-2019-09-15_0300.9.tar.gz
    database-2019-09-18_0300.12.tar.gz
    database-2019-09-19_0300.13.tar.gz
    database-2019-09-20_0300.14.tar.gz
    database-2019-09-21_0300.15.tar.gz
    database-2019-09-22_0300.16.tar.gz
    database-2019-09-23_0300.17.tar.gz
    database-2019-09-24_0300.18.tar.gz
    

    可以看到,此时使用的是按照第二列的数值进行排序(第一列默认使用字典序排序),现象是正常的

    • 以. 为分隔,按照第二列进行排序,并且采用数值排序,同时逆序
    [root@centos7-18 test2]# ls |sort -t. -k2nr
    database-2019-09-24_0300.18.tar.gz
    database-2019-09-23_0300.17.tar.gz
    database-2019-09-22_0300.16.tar.gz
    database-2019-09-21_0300.15.tar.gz
    database-2019-09-20_0300.14.tar.gz
    database-2019-09-19_0300.13.tar.gz
    database-2019-09-18_0300.12.tar.gz
    database-2019-09-15_0300.9.tar.gz
    database-2019-04-01_0300.tar.gz
    database-2019-04-15_0300.tar.gz
    database-2019-05-01_0300.tar.gz
    database-2019-05-15_0300.tar.gz
    database-2019-06-01_0300.tar.gz
    database-2019-06-15_0300.tar.gz
    database-2019-07-01_0300.tar.gz
    database-2019-07-15_0300.tar.gz
    database-2019-08-01_0300.tar.gz
    database-2019-08-15_0300.tar.gz
    database-2019-09-01_0300.tar.gz
    

    可以看到,后面如下文件,并没有逆序排列

    database-2019-04-01_0300.tar.gz
    database-2019-04-15_0300.tar.gz
    database-2019-05-01_0300.tar.gz
    database-2019-05-15_0300.tar.gz
    database-2019-06-01_0300.tar.gz
    database-2019-06-15_0300.tar.gz
    database-2019-07-01_0300.tar.gz
    database-2019-07-15_0300.tar.gz
    database-2019-08-01_0300.tar.gz
    database-2019-08-15_0300.tar.gz
    database-2019-09-01_0300.tar.gz
    
    • 如果想实现,后面那些文件也逆序排列,可以使用如下代码
    [root@centos7-18 test2]# ls |sort -t. -k2n |sort -r
    database-2019-09-24_0300.18.tar.gz
    database-2019-09-23_0300.17.tar.gz
    database-2019-09-22_0300.16.tar.gz
    database-2019-09-21_0300.15.tar.gz
    database-2019-09-20_0300.14.tar.gz
    database-2019-09-19_0300.13.tar.gz
    database-2019-09-18_0300.12.tar.gz
    database-2019-09-15_0300.9.tar.gz
    database-2019-09-01_0300.tar.gz
    database-2019-08-15_0300.tar.gz
    database-2019-08-01_0300.tar.gz
    database-2019-07-15_0300.tar.gz
    database-2019-07-01_0300.tar.gz
    database-2019-06-15_0300.tar.gz
    database-2019-06-01_0300.tar.gz
    database-2019-05-15_0300.tar.gz
    database-2019-05-01_0300.tar.gz
    database-2019-04-15_0300.tar.gz
    database-2019-04-01_0300.tar.gz
    

    抽象成简单例子

    • 构造数据
    [root@centos7-18 test5]# ls
    d1.tar.gz  d2.tar.gz  d3.tar.gz
    
    • 测试
    [root@centos7-18 test5]# ls |sort -t. -k2
    d1.tar.gz
    d2.tar.gz
    d3.tar.gz
    [root@centos7-18 test5]# 
    [root@centos7-18 test5]# ls |sort -t. -k2n
    d1.tar.gz
    d2.tar.gz
    d3.tar.gz
    [root@centos7-18 test5]# ls |sort -t. -k2nr
    d1.tar.gz
    d2.tar.gz
    d3.tar.gz
    

    可以看到,当参数与-k2写在一起的时候,该参数只针对第2列有效,对第一列的排序不起作用

    • 如果想对整个字符串起作用,需要将参数单独写出来,如下
    [root@centos7-18 test5]# ls |sort -t. -k2 -n
    d1.tar.gz
    d2.tar.gz
    d3.tar.gz
    [root@centos7-18 test5]# ls |sort -t. -k2 -n -r
    d3.tar.gz
    d2.tar.gz
    d1.tar.gz
    
  • 相关阅读:
    案例详解:MTU不一致导致主机和RAC不断重启
    近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例->Oracle故障分析的方法论+DBA能力提升要领...
    一个模版让报表自动生成,领导:这才是数据分析人该干的事
    如何构造一个 SYN_SENT 状态的连接
    TCP 3次握手原理
    SpringCloud Alibaba微服务番外一
    socket bind 随机端口
    Yii项目Security加密解密类提取
    linux中iptables配置文件及命令详解详解
    linux中iptables配置文件及命令详解详解
  • 原文地址:https://www.cnblogs.com/yldf/p/11899957.html
Copyright © 2020-2023  润新知