zoukankan      html  css  js  c++  java
  • 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条数据
    
  • 相关阅读:
    Atitit.Java exe bat  作为windows系统服务程序运行
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  • 原文地址:https://www.cnblogs.com/liping0826/p/13229165.html
Copyright © 2011-2022 走看看