这篇文章仅限于IT行业的同行阅读,抱歉。 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 使用方式大家自行上网查找,主要有三种调用方式,命令行方式、shell脚本方式和单独文件方式。 本人写了一个awk语言的日志分析脚本,如下: 'BEGIN { count=0; filters[0]=0; counts=0; } {if($0~/StopWatch/){ filter[count,0] = $0; count++; }else if($2~/%/){ if($3~/Task/){ filter[count,0] = $0; count++; }else if($4~/matchObj/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($3~/SA/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($3~/MA/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($3~/POI/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($4~/addr/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($3~/SK/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($4~/info/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($3~/gps/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($4~/Org/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; }else if($4~/Special/){ filter[count,0] = $0; filter[count,1] = $1; filter[count,2] = $2; filter[count,3] = $3; filter[count,4] = $4; count++; } } } END{for(i=0;i<=count;i++){ if(filter[i,1]>20){ for(j=i;j>0;j--){ if(filter[j,0]~/StopWatch/){ for(t=j;t<=i;t++){ filters[counts]=filter[t,0]; counts++; } break; } } for(i=i+1;i<=count;i++){ if(filter[i,0]~/StopWatch/){ break; } filters[counts]=filter[i,0]; counts++; } } } for(i=0;i<counts;i++){ print filters[i]; } }'
使用说明: 1、 在命令脚本里设置过滤条件,例如超时临界值 2、在Linux环境里直接调用awk命令脚本, awk -f awkText.txt log.txt > result.txt 查找结果会在result.txt里看到。
|