awk命令分析apache日志的方法,awk分析指定格式的apache日志文件的例子,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为最后一个。
例子:
#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语言类似
与或非(&&,||,!)
大于,小于,等于,不等于(>,<,==,!=) 正则匹配符 匹配(~) 不匹配(!~) |