awk程序

awk能提供一个类似于编程的开放环境,让你能够自定义文本处理的规则,修改和重新组织文件中的内容。在awk编程语言的内部,可以定义保存数据的变量,使用算术和字符串操作函数对数据进行运算,支持结构化编程概念,能够使用if和循环语句等。

awk使用的通用格式如下:

awk [option] 'pattern {action}' file

其中,option为命令的选项,pattern为行匹配规则,action为执行的具体操作;如果没有pattern,则对所有行执行action,而如果没有action,则打印所有匹配的行;file为输入的文件。

打印文件指定的列:

awk '{print $1}' test.log | head -10

print 命令用来格式化输出,支持转义字符,$1表示第一列,awk默认用空格将一行分割成多个列,可以使用-F来指定列的分隔符。

筛选指定的行,并且打印出其中一部分列:

awk '/tomcat/{print $1,$6}' test.log | head -10

使用/tomcat/查找包含tomcat的行,并且打印第一列、第六列。

查找length大于40的行,并且打印该行的第三列:

awk 'length($0)>40{print $3}' test.log | head -10

$0表示当前的行,length($0)用来获取当前行的长度,然后通过print $3打印出第三列。

对内容进行格式化输出:

awk '{line = sprintf ( "method:%s,response:%s",$3,$7);print line}' test.log | head -10

定义一个line的变量,用于接收sprintf的输出,而sprintf用于格式化输出第三行的请求方式和第七行的响应时间。

awk支持编程的方式来定义文本处理,如果程序较为复杂,可以将文本处理程序定义在文件中,通过-f选项来指定包含文本处理程序的脚本文件。例如,可以将前面执行的格式化输出命令放在testawk文件中。

awk -f testawk test.log | head -10

 

awk还包括其他一些很强大的功能:

{

     if( map[$4] > 0 ){

         map[$4]=map[$4] + $2

         map_time[$4]=map_time[$4] + 1

     }

     else{

         map[$4]=$2

         map_time[$4]= 1

       }

}

END{

for(i in map){

     print i"="map[i]/map_time[i];

     }

}

通过上面一段awk脚本,可以将输入的日志信息的第四列,也就是页面响应时间进行累加,并且将页面的访问次数也累加起来,最后求出平均值,也就是页面的平均响应时间。其中,变量map中存放的是每个url所对应的响应时间累加值,而map_time中存放的则是每个页面被访问的次数。awk数组支持通过字符串进行索引,最后在END块中对map进行迭代,打印出每个url的平均响应时间。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值