解析访问日志文件

时间:2014-12-23 19:24:45

标签: bash logging

我有一项任务是使用unix命令行从访问日志文件(通用日志格式)接收此类信息:

使用status_code == 200

计算请求数

该日志文件中有一段(包含1天的数据):

127.0.0.1 "1.1.1.1" - [02/Dec/2014:14:30:00 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 7
127.0.0.1 "1.1.1.1" - [02/Dec/2014:14:32:30 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 8
127.0.0.1 "1.1.1.1" - [02/Dec/2014:15:20:12 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 8
127.0.0.1 "1.1.1.1" - [02/Dec/2014:15:22:20 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 8
127.0.0.1 "1.1.1.1" - [02/Dec/2014:15:30:10 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 8
127.0.0.1 "1.1.1.1" - [02/Dec/2014:15:35:15 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 7
127.0.0.1 "1.1.1.1" - [02/Dec/2014:16:25:11 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 7
127.0.0.1 "1.1.1.1" - [02/Dec/2014:16:27:10 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 8
127.0.0.1 "1.1.1.1" - [02/Dec/2014:16:33:12 +0000] "POST /server/ad?uid=abc&type=INV HTTP/1.1" 200 3966 10

我用这个:

$ awk -F[:\ ] '{count[$5]++}; $12 == 200 { hour[$5]++} END { for (i in hour) print i, count[i] }' acces_log.log

收到这个:

14 2
15 4
16 3

但是有一个小提示:所有结果都应存储在文件中。我想知道,我怎样才能从命令行执行此操作。

此致

1 个答案:

答案 0 :(得分:1)

所有Linux / Unix和DOS命令行都了解重定向的符号<, <<, >, >>

要将输出重定向到文件,请使用

awk '{....}' > outputFile
#------------^ -- redirection

此重定向将始终创建新的outputFile,即使已经存在。{/ p>

将(额外)数据附加到文件使用

awk '{ .... }' >> outputFile
#--------------^^ -- append

IHTH