• sort与uniq命令


    1.sort

    sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。

    如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

    1.1语法

    sort [-fbMnrtuk] [file or stdin]
    选项与参数:
    -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
    -b :忽略最前面的空格符部分;
    -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
    -n :使用『纯数字』进行排序(默认是以文字型态来排序的);
    -r :反向排序;
    -u :就是 uniq ,相同的数据中,仅出现一行代表;
    -t :分隔符,默认是用 [tab] 键来分隔;
    -k :以那个区间 (field) 来进行排序的意思

    1.2sort实例

    1.2.1对/etc/passwd 的账号进行排序

    [root@localhost ~]# sort /etc/passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    elasticsearch:x:997:995:elasticsearch user:/nonexistent:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    halt:x:7:0:halt:/sbin:/sbin/halt
    kibana:x:996:994:kibana service user:/home/kibana:/sbin/nologin
    logstash:x:995:993:logstash:/usr/share/logstash:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    mysql:x:1000:1000::/home/mysql:/sbin/nologin
    named:x:25:25:Named:/var/named:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    

    sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

    1.2.2/etc/passwd 内容是以 : 来分隔的,以第三栏来排序

    默认是以字符串来排序的,第三列为数字:

    [root@localhost ~]# cat /etc/passwd |sort -t ':' -k 3n
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    named:x:25:25:Named:/var/named:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    logstash:x:995:993:logstash:/usr/share/logstash:/sbin/nologin
    kibana:x:996:994:kibana service user:/home/kibana:/sbin/nologin
    elasticsearch:x:997:995:elasticsearch user:/nonexistent:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    mysql:x:1000:1000::/home/mysql:/sbin/nologin
    

    sort默认是升序排序,如果要倒序排序,如下

    [root@localhost ~]# cat /etc/passwd |sort -t ':' -k 3nr
    mysql:x:1000:1000::/home/mysql:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    elasticsearch:x:997:995:elasticsearch user:/nonexistent:/sbin/nologin
    kibana:x:996:994:kibana service user:/home/kibana:/sbin/nologin
    logstash:x:995:993:logstash:/usr/share/logstash:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    named:x:25:25:Named:/var/named:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    halt:x:7:0:halt:/sbin:/sbin/halt
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    sync:x:5:0:sync:/sbin:/bin/sync
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    

    1.2.3如果要对/etc/passwd,先以第6列的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

    [root@localhost ~]# cat /etc/passwd |sort -t':' -k 6.2,6.4 -k 1r   
    bin:x:1:1:bin:/bin:/sbin/nologin
    mysql:x:1000:1000::/home/mysql:/sbin/nologin
    kibana:x:996:994:kibana service user:/home/kibana:/sbin/nologin
    elasticsearch:x:997:995:elasticsearch user:/nonexistent:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    logstash:x:995:993:logstash:/usr/share/logstash:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    named:x:25:25:Named:/var/named:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    

    1.2.4查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重

    [root@localhost ~]# cat /etc/passwd |sort -t':' -k 7 -u
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    halt:x:7:0:halt:/sbin:/sbin/halt
    bin:x:1:1:bin:/bin:/sbin/nologin
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    

    2.uniq

    uniq命令可以去除排序过的文件中的重复行

    因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的

    2.1uniq语法

    uniq [-icu]
    选项与参数:
    -i :忽略大小写字符的不同;
    -c :进行计数
    -u :只显示唯一的行

    2.2uniq实例

    2.2.1直接去重未经排序的文件,将会发现没有任何行被去掉

    [root@localhost ~]# cat test
    hello
    world
    ni
    hao
    hello
    world
    hao
    hello
    hao
    [root@localhost ~]# uniq test
    hello
    world
    ni
    hao
    hello
    world
    hao
    hello
    hao
    

    先排序文件,再去重

    [root@localhost ~]# cat test|sort|uniq
    hao
    hello
    ni
    world
    

    在行首位置输出该行重复的次数

    [root@localhost ~]# cat test|sort|uniq -c
          3 hao
          3 hello
          1 ni
          2 world
    

    2.2.2仅显示存在重复的行,并在行首显示该行重复的次数

    [root@localhost ~]# cat test|sort|uniq -dc
          3 hao
          3 hello
          2 world
    

    2.2.3仅显示不重复的行

    [root@localhost ~]# cat test|sort|uniq -u
    ni
    

    3.高级用法

    cat log |awk -F'|' '{print $3}'|sort|uniq -c|sort -nr|head -5
    
    """
    1. 查看log
    2. 使用awk工具, 指定分隔符为'|', 输出第三段
    3. <2>作为sort的输出进行排序
    4. <3>作为uniq的输入进行去重, -c参数显示重复数量
    5. <4>作为sort的输入进行排序, -nr指定按照重复数量进行排序, 并且反序
    6. <5>作为head的输入, 输出前5条数据
    
  • 相关阅读:
    5.9编程练习
    linux下查看torch版本和cuda版本
    4.13编程练习
    C++ Primer Plus-3.7编程练习-第2题和第5题
    More on vim tips
    Method Calling in Perl
    换零钱 动态规划解法 C语言描述
    海伦平方根算法(LISP描述)
    expect 实现模拟交互
    tmux 入门
  • 原文地址:https://www.cnblogs.com/liping0826/p/13229165.html
Copyright © 2020-2023  润新知