作者:李老鱼儿_654 | 来源:互联网 | 2014-05-28 10:53
使用awk提取apache日志的GET数据最近开始用awk写脚本...以下是处女座,发上来纪念下。呵呵。也省得以后要用找不到。分析要求1analysis-need.php的数据21数据的如下GET参数{pa1,pa2,pa3}的数值3在得到2的结果后,按如下格式输出{时间,pa1,pa2
使用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 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 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 导出
完毕。