首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

[]Shell编写apache日志分析脚本

2012-04-09 
[求助]Shell编写apache日志分析脚本日志格式如下:127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] GET /port

[求助]Shell编写apache日志分析脚本
日志格式如下:
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /port/user.php?uid=54129&cla=baidu&key=e5d38743014f88f953269399282c86f5 HTTP/1.1" 200 4 "-" "-" 35622
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /test.php HTTP/1.1" 200 4 "-" "-" 35622
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /port/user.php?uid=12312&cla=google&key=e5d38743014f88f953269399282c86f5 HTTP/1.1" 200 4 "-" "-" 35622
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /port/port.php?uid=15642&key=e5d38743014f88f953269399282c86f5 HTTP/1.1" 200 4 "-" "-" 35622
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /test.php HTTP/1.1" 200 4 "-" "-" 35622

需求如下:
user.php的分析结果文件名从这里来……aaa.php?cla=bbb……
>>> aaa.bbb.log。

port.php的分析结果输出就直接是port.log

内容格式如下:
IP date response
127.0.0.1 14/Feb/2012:00:02:32 35622

只要user.php和port.php的访问日志。
默认情况下筛选user\port的所有日志。
另外,可以在执行脚本时指定user或port,以及某一天的日期进行筛选。

=========================
以下是我大概写的片断,菜鸟,请见谅。
若有更好的也请前辈位帮忙改写一下,谢谢!

Perl code
……path=/apache/access/log/host=$1case $type in"user")cat $file | grep $type | awk '/GET/&&/user.php\?uid=/{split($7,a,"[/|.|?|=|&]");print $1,substr($4,2),$NF > a[3]"."a[8]".log"}';;"port")cat $file | grep $type | awk -F " " '{print $1,substr($4,2),$NF}' >> $path$type.log # 这里的$path起作用了;;esac……


还有一个小问题,一直试不出来:

1、想把输出的文件指定到$path下,如:
/apache/access/log/user.baidu.log

2、把$host(192.168.1.1)的内容添加到输出文件的内容里面,就是在awk筛选出来的结果前加入$host的内容,如:
192.168.1.1 111.111.111.111 14/Feb/2012:00:02:32 35622

我直接把$path和$host放到awk里面,但是执行不了提示错误,实在没办法了。

请指点一下我该怎么改写,谢谢!

[解决办法]
[root@jx-csblog01.jx.baidu.com ~]# awk -v "path=/root" -v "host=localhost" 'BEGIN{print path","host}'
/root,localhost

这个意思么.
[解决办法]
C/C++ code
[16:59:50] tty:[2] jobs:[0] cwd:[~/shell][liangdong@jx-csblog01.jx.baidu.com shell]$ echo -e "a.b.c\nd.e.c\n" | awk -F '.' '{print $1"."$2 >> $3".log"}'[17:01:25] tty:[2] jobs:[0] cwd:[~/shell][liangdong@jx-csblog01.jx.baidu.com shell]$ lltotal 16-rw-rw-r--  1 liangdong liangdong 80 Feb 16 13:08 a.txt-rw-rw-r--  1 liangdong liangdong 30 Feb 16 13:11 b.txt-rw-rw-r--  1 liangdong liangdong  8 Feb 20 17:01 c.log-rwxrw-r--  1 liangdong liangdong 14 Feb 20 16:23 test.sh[17:01:26] tty:[2] jobs:[0] cwd:[~/shell][liangdong@jx-csblog01.jx.baidu.com shell]$ cat c.log a.bd.e
[解决办法]
awk里的变量不需要$,没有其他错误.

热点排行