• sort uniq 命令 企业应用场景实战排序


    一:命令 sort

    用法:sort [选项]... [文件]...
     或:sort [选项]... --files0-from=F
    串联排序所有指定文件并将结果写到标准输出。
    
    长选项必须使用的参数对于短选项时也是必需使用的。
    排序选项:
      -b, --ignore-leading-blanks   忽略前导的空白区域
      -d, --dictionary-order        只考虑空白区域和字母字符
      -f, --ignore-case             忽略字母大小写
      -g, --general-numeric-sort    按照常规数值排序
      -i, --ignore-nonprinting      只排序可打印字符
      -M, --month-sort              比较 (未知) < "一月" < ... < "十二月"
                                    在LC_ALL=C 时为(unknown) < `JAN' < ... < `DEC'
      -h, --human-numeric-sort    使用易读性数字(例如: 2K 1G)
      -n, --numeric-sort            根据字符串数值比较
      -R, --random-sort             根据随机hash 排序
          --random-source=文件      从指定文件中获得随机字节
      -r, --reverse                 逆序输出排序结果
          --sort=WORD               按照WORD 指定的格式排序:
                                            一般数字-g,高可读性-h,月份-M,数字-n,
                                            随机-R,版本-V
      -V, --version-sort            在文本内进行自然版本排序
    
    其他选项:
    
          --batch-size=NMERGE       一次最多合并NMERGE 个输入;如果输入更多
                                            则使用临时文件
      -c, --check, --check=diagnose-first   检查输入是否已排序,若已有序则不进行操作
      -C, --check=quiet, --check=silent     类似-c,但不报告第一个无序行
          --compress-program=程序   使用指定程序压缩临时文件;使用该程序
                                            的-d 参数解压缩文件
          --debug                   为用于排序的行添加注释,并将有可能有问题的
                                            用法输出到标准错误输出
          --files0-from=文件        从指定文件读取以NUL 终止的名称,如果该文件被
                                            指定为"-"则从标准输入读文件名
      -k, --key=位置1[,位置2]       在位置1 开始一个key,在位置2 终止(默认为行尾)
                                    参看POS 语法。
      -m, --merge                   合并已排序的文件,不再进行排序
      -o, --output=文件             将结果写入到文件而非标准输出
      -s, --stable                  禁用last-resort 比较以稳定比较算法
      -S, --buffer-size=大小        指定主内存缓存大小
      -t, --field-separator=分隔符  使用指定的分隔符代替非空格到空格的转换
      -T, --temporary-directory=目录        使用指定目录而非$TMPDIR 或/tmp 作为
                                            临时目录,可用多个选项指定多个目录
          --parallel=N              将同时运行的排序数改变为N
      -u, --unique          配合-c,严格校验排序;不配合-c,则只输出一次排序结果
      -z, --zero-terminated 以0 字节而非新行作为行尾标志
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
    
    POS 是F[.C][OPTS],F 代表域编号,C 是域中字母的位置,F 和C 均从1开始计数
    如果没有有效的-t 或-b 选项存在,则从前导空格后开始计数字符。OPTS 是一个或多个
    由单个字母表示的顺序选项,以此覆盖此key 的全局顺序设置。如果没有指定key 则
    将其整个行。
    
    指定的大小可以使用以下单位之一:
    内存使用率% 1%,b 1、K 1024 (默认),M、G、T、P、E、Z、Y 等依此类推。
    
    如果不指定文件,或者文件为"-",则从标准输入读取数据。


    #几个常用的参数
      -n, --numeric-sort            根据字符串数值比较
      -r, --reverse                 逆序输出排序结果
          --sort=WORD               按照WORD 指定的格式排序:
                                            一般数字-g,高可读性-h,月份-M,数字-n,
                                            随机-R,版本-V
      -V, --version-sort            在文本内进行自然版本排序
      -k, --key=位置1[,位置2]       在位置1 开始一个key,在位置2 终止(默认为行尾)
                                    参看POS 语法。
      -t, --field-separator=分隔符  使用指定的分隔符代替非空格到空格的转换

    二:uniq

    •  uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的

    uniq语法

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

    #直接删除未经排序的文件,将会发现没有任何行被删除

    [root@w tmp]# cat a.txt
    a
    b
    a
    b
    a
    c
    c
    b
    [root@w tmp]# uniq a.txt
    a
    b
    a
    b
    a
    c
    b

    #排序之后删除了重复行,同时在行首位置输出该行重复的次数
    [root@w tmp]# cat a.txt a b a b a c c b [root@w tmp]# cat a.txt
    | sort | uniq a b c
    #仅显示存在重复的行,并在行首显示该行重复的次数
    [root@w tmp]# cat a.txt | sort | uniq a b c [root@w tmp]# cat a.txt | sort | uniq -c 3 a 3 b 2 c

    三:实战

    1.统计tcp状态进行排序  

    [root@w tmp]# netstat -an |awk '/tcp/{s[$NF]++}END{for (i in s)print i,s[i]}' | sort -rnk 2  #这里的k代表是第二列 红色标注
    LISTEN 13
    TIME_WAIT 1
    ESTABLISHED 1

    [root@w tmp]# netstat -an| awk '/tcp/{print $NF}' | uniq -c | sort -rnk 1   #这里的 r 倒序   n 按照数值排序  k 按照k列进行排序 我们这个是第一列
    28 TIME_WAIT
    9 LISTEN
    4 LISTEN
    2 TIME_WAIT
    1 ESTABLISHED

    [root@w tmp]# ss -an | awk '/^tcp/{print $2}' |uniq -c |sort -rnk 1
    9 LISTEN
    4 LISTEN
    2 TIME-WAIT
    1 ESTAB

    2 /etc/password 的uid 进行排序  

    [root@w tmp]# sort  -t: -rnk 3 /etc/passwd
    nginx:x:304:303:Nginx web server:/var/lib/nginx:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/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
    tcpdump:x:72:72::/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/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

    3.统计nginx access.log日志里面 访问最多的前10个IP地址 

    [root@w logs]# awk '{print $1}' access.log  | sort  | uniq -c  |sort -rnk 1 |head -n 10
       6811 127.0.0.1
        261 123.249.27.191
        184 61.176.220.76
        149 61.176.222.170
        147 61.176.222.171
         77 223.71.85.10
         59 5.188.10.246
         54 192.3.185.51
         53 118.187.22.26
         46 80.82.78.50
  • 相关阅读:
    MySQL DATE_ADD() 函数
    今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
    Spring cloud Eureka注册中心搭建的方法Spring cloud Eureka注册中心搭建的方法
    Spring Cloud Config配置中心
    在IDEA下导入Maven项目之后 Dependencies报红线
    解决idea项目没有蓝色小方块
    idea 导入源码显示橙色
    MYSQL中的UNIX_TIMESTAMP函数
    kernel 文件系统挂载流程分析【转】
    Linux--根文件系统的挂载过程分析【转】
  • 原文地址:https://www.cnblogs.com/egrep/p/8849928.html
Copyright © 2020-2023  润新知