分享

awk 程序命令分享

 轩少侠 2019-05-31

这篇文章仅限于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、 在命令脚本里设置过滤条件,例如超时临界值

awk 程序命令分享

2、在Linux环境里直接调用awk命令脚本,

awk -f awkText.txt log.txt > result.txt

查找结果会在result.txt里看到。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多