我的httpd日志格式如下
123.251.0.000 - - [05/Sep/2014:18:19:24 -0700] "GET /myapp/MyService?param1=value1¶m2=value2¶m3=value3 HTTP/1.1" 200 15138 "-" "-"
我需要提取以下字段并显示在一行:
IP value1 httpResponseCode(eg.200), dataLength
在bash中执行此操作的最有效方法是什么?
答案 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¶m2=value2¶m3=value3 HTTP/1.1" 200 15138 "-" "-"
$ awk '{ print "IP", $1, $9, $10 }' tmp.txt
IP 123.251.0.000 200 15138