计算每个 API 版本在日志文件中出现的次数

计算每个 API 版本在日志文件中出现的次数

开发脚本,在端口 33001 上接收来自本地主机的数据,并查找请求不同 API 版本的次数并将其打印在屏幕上。

示例日志是:

172.32.11.121 736443 /api/2.3
98.134.54.184 182294 /api/2.3
172.32.11.121 736443 /api/2.3/security
203.44.122.18 397832 /api/3.0
172.32.11.121 736443 /api/2.3
98.134.54.184 182294 /api/3.0
172.32.11.121 736443 /api/2.3/logging
172.32.11.121 736443 /api/2.3
71.11.139.205 291187 /api/2.3
172.32.11.121 736443 /api/3.0/security
98.134.54.184 182294 /api/2.3
71.11.139.205 397832 /api/3.0/logging

第一个字段是 IP 地址,第二个字段是用户 ID,最后一个字段是资源路径。

答案1

假设文件中的数据indata

$ awk '{ ++c[$NF] } END { for (i in c) print c[i], i }' indata
1 /api/2.3/logging
1 /api/3.0/security
6 /api/2.3
2 /api/3.0
1 /api/3.0/logging
1 /api/2.3/security

awk脚本跟踪最后一列中的数据显示的次数,并在最后打印此信息的摘要。

仅获取版本数字,使用-F '/'并替换$NF$3

或者:

$ cut -d ' ' -f 3 indata | sort | uniq -c
   6 /api/2.3
   1 /api/2.3/logging
   1 /api/2.3/security
   2 /api/3.0
   1 /api/3.0/logging
   1 /api/3.0/security

这会从数据中删除第三个空格分隔列并对其进行排序。uniq -c然后计算每个唯一条目出现的次数。

要仅获取此变体的版本号,请在调用中替换-d ' '为。-d '/'cut

答案2

假设您只关心版本而不关心整个路径:

$ awk -F/ '{count[$3]++} END {for (v in count) print v, count[v]}' file
2.3 8
3.0 4

拆分 上的字段/,版本号似乎是所有行中的第三个字段。

相关内容