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
原文地址:https://www.cnblogs.com/egrep/p/8849928.html