解析bash中的httpd日志

时间:2014-09-06 05:31:42

标签: linux bash apache

我的httpd日志格式如下

123.251.0.000 - - [05/Sep/2014:18:19:24 -0700] "GET /myapp/MyService?param1=value1&param2=value2&param3=value3 HTTP/1.1" 200 15138 "-" "-"

我需要提取以下字段并显示在一行:

IP value1 httpResponseCode(eg.200), dataLength

在bash中执行此操作的最有效方法是什么?

2 个答案:

答案 0 :(得分:1)

当您使用Linux时,您可能还安装了GNU awk。如果是这样的话:

$ awk 'match ($7, /param1=([^& ]*)/, m) { print $1, m[1], $9",", $10 }' http.log

给出:

123.251.0.000 value1 200, 15138

只要value1没有&符号或空格,只要请求被正确转义,就不会这样做。

答案 1 :(得分:0)

$ cat tmp.txt 
123.251.0.000 - - [05/Sep/2014:18:19:24 -0700] "GET /myapp/MyService?param1=value1&param2=value2&param3=value3 HTTP/1.1" 200 15138 "-" "-"

$ awk '{ print "IP", $1, $9, $10 }' tmp.txt
IP 123.251.0.000 200 15138