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