用awk工具分析系统日志-小试牛刀
最近团队需要分析一下网站各uri在框架中的执行时间,所以想到用awk这个分析字符串能力很强的工具来时间,下面是实现代码,具体看行注释。
下面这个是awk 脚本,然后运行 cat 框架日志文件|awk -f hapn.awk|sort -k2nr,结果就行了.
#!/bin/awk #desc 统计系统日志发掘请求执行记录 #author ********* #date 2013.4.24 BEGIN {
#初始化统计记录个数变量 total_count=0; } /uri:\/[a-z]+/&&/total/ {#匹配日志记录中符合这个规则的记录uri:/accounts/login total:78643 gsub(/\[/," ",$0);#替换单行记录中的[ gsub(/\]/," ",$0);#替换单行记录中的] gsub(/\=/,":",$0);#替换单行记录中的= gsub(/time\:/,"",$0);#替换单行记录中的time: uri=""; total=0; total_count++; for(i=1;i<=NF;i++) { #匹配uri m=match($i,/uri/);#正则匹配uri的字段 if(m>0) { split($i,ar,":");#将uri:/acctounts 分拆为ar[1]="uri" ar[2]="/accounts"的数组 uri_str=ar[2]; uri=""; len=split(uri_str,u_ar,"/");#分拆ar[2]以/为分割符 for(j=1;j<=len;j++) { if(u_ar[j]) { if(0<match(u_ar[j],/^[0-9]+$/))#匹配数字 如果uri中有数字则统计为一类uri { uri=uri"/[NUM]";#带有数字的uri的替换数字为NUM }else{ uri=uri"/"u_ar[j]; } } } continue; } #匹配耗时 m=match($i,/total/);#正则匹配total的字段 if(m>0) { split($i,ar,":"); total=ar[2]; } } #存储相关值 if(uri in source)#看看数组是否已经记录uri { source[uri]+=total; source_count[uri"_count"]+=1; #计算最大值 if(source_max[uri]<total) { source_max[uri]=total; } #计算最小值 if(source_min[uri]>total) { source_min[uri]=total; } }else{#为数组赋初值 source[uri]=total; source_count[uri"_count"]=1; source_max[uri]=total; source_min[uri]=total; } } END {#最后计算统计结果并输出 for(m in source) { #计算平均耗时 average = source[m]/source_count[m"_count"]/1000; if(average>100) { #计算uri的请求比率 average_rows = source_count[m"_count"]/total_count*100; printf("%-30s\t%-20.2f\t%-20.2f\t%-20.2f\t%-20.2f\t%-20d\t%-20d\n",m,average,source_max[m]/1000,source_min[m]/1000,average_rows,source_count[m"_count"],total_count); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库