日志分析统计sort与uniq命令详解

一、sort命令:排序工具
1. 基本功能
- 作用:对文件内容或命令结果进行排序。
- 常用选项:
-n
:按数字大小排序(默认按字符排序)。
-r
:逆序排序(从大到小)。
-k
:指定排序的列(如-k2
表示按第2列排序)。
-t
:指定分隔符(如-t':'
表示以冒号分隔列)。
2. 核心案例
生成测试文件
1 2 3 4 5 6 7 8 9 10
| vim file.txt 99 1 10 23 3 0000 02 9 19
|
案例1:基本数字排序
sort默认是按照字母/字符进行对比,会造成数字对比失败!
解决 -n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| sort file.txt 0000 02 1 10 19 23 3 9 99
sort -n file.txt 0000 1 02 3 9 10 19 23 99
sort -nr file.txt 99 23 19 10 9 3 02 1 0000
|
案例2:按指定列排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| vim file.txt 99 19 1 9 10 02 23 0000 3 3 0000 23 02 10 9 1 19 99
sort -nk2 file.txt 23 0000 9 1 10 02 3 3 1 9 02 10 99 19 0000 23 19 99
sort -nrk2 file.txt 19 99 0000 23 99 19 02 10 1 9 3 3 10 02 9 1 23 0000
|
案例3:多列排序
-nk1 -nk2
的执行逻辑:
- 首先按第一列(
k1
)数值排序(-n
)。
- 仅当第一列的值相同时,才会按第二列(
k2
)数值排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| vim file2.txt 3 300 1 100 2 200 3 30 1 10 2 20
sort -nk1 -nk2 file2.txt 1 10 1 100 2 20 2 200 3 30 3 300
|
案例4:指定分隔符排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sort -t':' -nrk3 /etc/passwd xiao:x:1000:1000:xiao:/home/xiao:/bin/bash polkitd:x:999:997:User for polkitd:/:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/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 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. 企业面试题
题目:从ls /etc/
输出中取出文件大小最大的前5个文件。
解答:
1 2 3 4 5 6
| ls -l /etc/ | sort -nrk5 | head -5 -rw-r--r--. 1 root root 670293 6月 7 2013 services -rw-r--r--. 1 root root 19138 4月 3 15:50 ld.so.cache -rw-r--r--. 1 root root 12288 4月 3 15:48 aliases.db -rw-r--r--. 1 root root 7274 4月 3 15:48 kdump.conf -rw-r--r--. 1 root root 6545 4月 1 2020 protocols
|
二、uniq命令:去重与统计
1. 基本功能
- 作用:去除相邻的重复行,并可统计重复次数。
- 常用选项:
-c
:统计每行出现的次数。
uniq -c
的默认格式是:
2. 核心案例
案例1:去重并统计次数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| sort file2.txt | uniq -c 1 1 10 1 1 100 1 2 20 1 2 200 1 3 30 1 3 300
sort file2.txt | uniq -c | sort -nr 1 3 300 1 3 30 1 2 200 1 2 20 1 1 100 1 1 10
|
案例2:日志分析实战
需求:统计日志文件中每个IP出现的次数,取前2名。
解答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
0.0.0.0 192.168.184.1 0.0.0.0 0.0.0.0 192.168.184.1 0.0.0.0 192.168.184.1 0.0.0.0 192.168.184.1 192.168.184.1 192.168.184.1
sort secure-ip.txt | uniq -c | sort -nr | head -2 6 192.168.184.1 5 0.0.0.0
|
三、sort与uniq组合应用
- 典型流程:
sort
→ uniq -c
→ sort -nr
→ head
- 适用场景:
日志分析、数据统计、系统信息整理等。
四、总结
- sort:排序工具,支持多列、数字、逆序、分隔符等功能。
- uniq:去重工具,需与
sort
配合使用。
- 组合命令:
sort | uniq -c | sort -nr
是日志分析的黄金组合。