java调用awk解析日志_用 awk 来处理 apache日志

用 awk 来处理 apache日志

awk 简介:

awk于1970年诞生于贝尔实验室,是一门用于处理文本数据的程序语言,名称来自于3位作者名字的首字母(Alfred Aho, Peter Weinberger, and Brian Kernighan),gawk为GNU awk。

常量符:

ARGC 命令行变元个数

ARGV 命令行变元数组

FILENAME 当前输入文件名

FNR 当前文件中的记录号

FS 输入域分隔符,默认为一个空格

RS 输入记录分隔符

NF 当前记录里域个数

NR 到目前为止记录数

OFS 输出域分隔符

ORS 输出记录分隔符

通常 Apache 日志格式如下所示:

`127.0.0.1 - - [02/Sep/2009:17:12:03 +0800] "GET /index.php?a1=100&a2=good HTTP/1.1" 200`

假设文件 my-access_log 里面存在上面这条日志,我们使用如下的命令来分析这条日志:

#awk '{printf "%s/n%s/n%s/n%s/n%s/n%s/n%s/n%s/n%s/n",$1,$2,$3,$4,$5,$6,$7,$8,$9}' my-access_log

127.0.0.1

-

-

[02/Sep/2009:17:12:03

+0800]

"GET

/index.php?a1=100&a2=good

HTTP/1.1"

200

从结果中可以看到 awk 是用空白字符将一行文本分隔成若干个字段,127.0.0.1 即为第一个字段,状态码200为最后一个

示例:

1,计算a2=good的日志的条数

#awk '{$7 ~ /a2=good/}' my-access_log | wc -l

2,与运算,a2等good && 请求时间大于17:00:00

#awk '{if( ($7 ~/a2=good/) &&  $4>"[02/Sep/2009:17:00:00") print $1}' | wc -l

3,调用awk命令文件

#awk -f commond.awk

条件运算符和关系运算符跟C语言类似

与或非(&&,||,!)

大于,小于,等于,不等于(>,

正则匹配符

匹配(~)

不匹配(!~)

未完待续,初级研究,仅供参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值