php如何获取awk结果,Linux系统中使用AWK命令提取出Apache日志中的GET参数数据

使用awk提取apache日志的GET数据

最近开始用awk写脚本...以下是处女座,发上来纪念下。呵呵。也省得以后要用找不到。

分析要求

1 analysis-need.php 的数据

2 1 数据的如下GET参数{pa1,pa2,pa3}的数值

3 在得到2 的结果后,按如下格式输出

{时间,pa1,pa2,pa3}

注:pa1,pa2,pa3的顺序不一致

awk的脚本如下

awk -F "?" '/GET

/analysis-need.php/{print$1, $2}' awk_test.log |awk -F

"HTTP/" '{print $1}'|awk '{gsub("&"," "); gsub(""GET

/analysis-need.php",""); gsub("]",""); print}'| awk -F "["

'{print $2}' | awk '{ORS =","; print $1; i=3;

get_p["doanalysis"]=1; while(i

=$i;split($i,tr,"=");get_p[tr[1]]=tr[2];i++}; print

get_p["pa1"];print get_p["pa2"];print get_p["pa3"]; print "n"

}' >> ${ANALYSIS_HOME}cuid_action.log

说明

a 获取来自“analysis-need.php”的数据行,这里假定apache的日志文件为“awk_test.log ”

awk -F "?" '/GET /b.php/{print$1, $2}'

awk_test.log

-------------------------------------------------------

b 梳理a中得到的数据,删除GET的&标记,时间的右标记,便于分析(左标记保留)

awk -F "HTTP/" '{print $1}'|awk '{gsub("&"," ");

gsub(""GET /analysis-need.php",""); gsub("]",""); print}'

-------------------------------------------------------

c 梳理c中得到的数据,删除时间的右标记(a,b,c三步可以合并,只是为了练手,懒了把)

awk -F "[" '{print $2}'

-------------------------------------------------------

d

下面是重点

awk '{ORS =","; print $1; i=3;

get_p["doanalysis"]=1; while(i

=$i;split($i,tr,"=");get_p[tr[1]]=tr[2];i++}; print

get_p["pa1"];print get_p["pa2"];print get_p["pa3"]; print "n"

}'

思路如下:

1 建立记录分隔符",",方便作为csv数据处理,因为默认是“n”。

2 使用NF,对每一个 "key=value"的记录段进行分析

3 将分析出的key和value使用awk的数组方式保存(key:get的参数名字;value:get的参数的值)

4 根据分析要求打印符合条件的key的value----这步以后可以按照分析的要求随时增加

5 导出

完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值