免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1889 | 回复: 7
打印 上一主题 下一主题

[其他] 【已解决】关于日志文件的分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-17 11:48 |只看该作者 |倒序浏览
本帖最后由 qmqpfi 于 2012-08-27 11:21 编辑

日志格式如下:
127.0.0.1 - - [14/Feb/2012:00:02:32 +0800] "GET /port/user.php?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?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?cla=google&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

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

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

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


===========================

大概的需求像上面所描述的(可能说得不是很清楚,请见谅)。

只懂一些SHELL的基本应用,太复杂的还没有深入学习,希望各位朋友帮忙指点一下。

谢谢!


另外,我想问一下:
awk -F" " '{print $1 "-" $4 "-" $13}' log.log >> test.log
在这里,我该怎么再对$1等结果集再进行筛选处理?

谢谢!

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-02-17 12:22 |只看该作者
用 split ($1, a, " ").
  1. awk '/GET/&&/[user|port].php\?cla=/{split($7,a,"[/|.|?|=|&]");print $1,$4,$NF > a[2]"."a[5]".log"}' infile
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-02-17 12:27 |只看该作者
本帖最后由 vsyour 于 2012-02-17 12:28 编辑

user\port
awk '/user/{print $0}' file
grep

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2012-02-17 12:29 |只看该作者
本帖最后由 rdcwayx 于 2012-02-17 12:30 编辑

我的那个命令会自动将所有的 user.php 和 port.php 对应的cla名 输出到以他们命名的文件里。 一步到位。

如果文件格式,或者文件名不符合你的想法,自己调整一下即可。

论坛徽章:
0
5 [报告]
发表于 2012-02-17 12:37 |只看该作者
回复 2# rdcwayx


    谢谢版主!

我把日志格式写错了,漏了写一个/port/xxx.php目录,请再帮忙改一下你的答案。

另外,筛选出来的文件里面,日期部分左边多了一个 [ 符号。

谢谢

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
6 [报告]
发表于 2012-02-17 13:30 |只看该作者
本帖最后由 rdcwayx 于 2012-02-17 13:31 编辑

这个就留给你当作业吧。 看懂我那个代码的话,改起来不难。也就俩个号码位置改改。

[ 符号,可以用 sub, gsub 替换掉

论坛徽章:
0
7 [报告]
发表于 2012-02-17 13:51 |只看该作者
回复 6# rdcwayx


    好的。谢谢!

论坛徽章:
0
8 [报告]
发表于 2012-02-19 23:45 |只看该作者
本帖最后由 qmqpfi 于 2012-02-19 23:46 编辑

回复 6# rdcwayx


    不好意思,发现还有一个小问题,一直试不出来

……
path=/apache/access/log/
host=$1
case $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里面,但是执行不了提示错误,实在没办法了。
请指点一下我该怎么改写,谢谢!


周末买了本<Shell脚本学习指南>,以后慢慢学习一下这个精悍而又强大的Shell
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP