とあるawkのログ集計法

estis2011/05/02 (月) 22:50 に投稿

今日似たようなことを質問されたので、忘れないようにメモ。


次のようなフォーマットのApacheアクセスログがある。

66.249.69.115 - - [19/Feb/2011:00:00:22 +0900] "GET /dp/user/login?destination=forum%2F60%3Fpage%3D1 HTTP/1.1" 200 63005 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
66.249.69.115 - - [19/Feb/2011:00:00:24 +0900] "GET /dp/aggregator/archives/www.cbsnews.com/2009/01/2009/08/30/free-the-h-1bs-free-the-economy?page… HTTP/1.1" 200 112495 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

ここでは、対象ファイルには、事前の操作でその日1日(0:00:00~23:59:59)のログがまとめられているとする。
ここからアクセス元IP毎に、何時何分にアクセスがあったかを集計する。

# awk -F[/:" "] '{IP[$7":"$8]=$1}END{for(i in IP)print IP[i],i}' LOG | sort | awk '{T[$1]=T[$1]" "$2}END{for(i in T)print i" ----"T[i]}' | sort -t. -k1 -n

集計結果は、次のような形になる。
(前略)
66.249.67.209 ---- 00:03 00:12 00:15 00:19 00:20 00:27 00:29 00:31 00:41 00:42 00:43 00:55 01:01 01:04 01:05 01:07 01:08 01:11 01:18 01:25 01:28 01:29 01:38 01:41 01:46 02:02 02:11 02:17 02:18 02:22 02:36 02:41 02:42 02:43 02:48 02:51 02:54 02:58 03:07 03:13 03:15 03:19 03:25 03:29 03:30 03:31 03:35 03:48 03:49 03:55 04:00 04:01 04:04 04:15 04:21 04:22 04:24 04:37 04:38 04:46 04:48 04:49 04:55 05:08 05:11 05:13 05:19 05:25 05:31 05:34 05:37 05:41 06:08 06:16 06:17 06:19 06:20 06:25 06:43 07:07 07:09 07:18 07:19 07:25 07:36 07:40 07:48 07:49 07:52 08:00 08:04 08:07 08:10 08:25 08:29 08:30 08:33 08:34 08:37 08:38 08:49 09:07 09:08 09:12 09:27 09:29 09:31 09:42 09:44 09:50 09:53 09:55 10:06 10:07 10:17 10:19 10:21 10:29 10:33 10:35 10:39 10:41 10:50 11:23 11:29 11:37 11:40 11:48 11:50 11:55 12:07 12:12 12:15 12:16 12:19 12:22 12:25 12:32 12:43 12:48 12:49 12:52 13:00 13:10 13:30 13:31 13:33 13:38 13:39 13:50 13:51 13:53 13:56 14:01 14:05 14:24 14:31 14:34 14:43 14:47 14:50 15:07 15:12 15:13 15:16 15:18 15:19 15:26 15:27 15:29 15:31 15:32 15:34 15:36 15:39 15:40 15:43 15:49 15:52 15:55 16:01 16:07 16:14 16:19 16:20 16:23 16:25 16:31 16:32 16:33 16:36 16:44 16:45 17:00 17:01 17:03 17:06 17:11 17:13 17:14 17:30 17:31 17:42 17:45 17:46 17:48 17:55 18:01 18:04 18:06 18:07 18:13 18:19 18:20 18:25 18:27 18:31 18:33 18:42 18:48 18:49 18:50 18:51 18:52 18:53 18:59 19:02 19:03 19:05 19:10 19:13 19:20 19:28 19:29 19:31 19:36 19:40 19:44 19:48 19:49 19:50 20:02 20:06 20:07 20:08 20:11 20:16 20:21 20:25 20:45 20:46 20:56 20:57 21:03 21:06 21:11 21:14 21:22 21:30 21:34 21:35 21:38 21:46 21:52 21:56 21:58 22:01 22:02 22:09 22:10 22:11 22:12 22:14 22:15 22:18 22:21 22:24 22:25 22:33 22:34 22:38 22:40 22:47 23:05 23:10 23:21 23:32 23:33 23:34 23:41 23:46 23:48 23:52 23:53
66.249.69.115 ---- 00:00 00:07 00:11 00:17 00:28 00:36 00:40 00:44 00:46 00:48 00:50 00:53 00:54 00:56 00:58 01:00 01:12 01:13 01:15 01:19 01:21 01:27 01:30 01:31 01:33 01:36 01:43 01:47 01:48 01:53 01:55 02:00 02:01 02:05 02:07 02:14 02:19 02:21 02:31 02:32 02:33 02:34 02:35 02:44 02:46 02:49 02:50 02:55 02:56 03:01 03:03 03:05 03:09 03:12 03:14 03:16 03:18 03:20 03:26 03:27 03:36 03:37 03:39 03:41 03:43 03:51 03:52 03:56 03:59 04:02 04:03 04:05 04:06 04:07 04:13 04:14 04:19 04:25 04:29 04:30 04:31 04:32 04:35 04:39 04:41 04:43 04:53 04:54 05:01 05:07 05:09 05:24 05:27 05:28 05:32 05:33 05:36 05:43 05:49 05:54 05:55 05:57 05:59 06:00 06:04 06:05 06:12 06:14 06:15 06:18 06:31 06:37 06:42 06:49 06:50 06:51 06:55 06:56 06:58 06:59 07:01 07:05 07:13 07:14 07:24 07:28 07:31 07:33 07:34 07:37 07:41 07:42 07:43 07:53 07:55 07:57 08:11 08:12 08:16 08:19 08:20 08:21 08:24 08:31 08:32 08:40 08:43 08:53 08:55 08:56 09:01 09:05 09:11 09:13 09:20 09:25 09:30 09:32 09:37 09:39 09:40 09:43 09:52 09:59 10:01 10:02 10:03 10:10 10:13 10:16 10:24 10:26 10:37 10:38 10:42 10:44 10:49 10:52 10:54 10:55 10:57 10:59 11:00 11:01 11:03 11:07 11:11 11:12 11:19 11:21 11:25 11:31 11:34 11:43 11:49 12:13 12:14 12:26 12:31 12:37 12:46 12:50 12:55 13:01 13:05 13:07 13:19 13:24 13:27 13:28 13:35 13:37 13:42 13:44 13:45 13:46 13:47 13:49 13:55 13:58 14:00 14:03 14:07 14:08 14:18 14:19 14:22 14:33 14:42 14:48 14:52 14:55 14:57 15:01 15:02 15:05 15:08 15:10 15:15 15:23 15:24 15:25 15:35 15:38 15:56 15:58 15:59 16:02 16:05 16:11 16:13 16:15 16:24 16:27 16:35 16:37 16:38 16:39 16:40 16:43 16:49 16:52 16:53 16:55 16:58 17:02 17:04 17:08 17:16 17:17 17:18 17:19 17:25 17:28 17:29 17:35 17:36 17:37 17:41 17:43 17:44 17:49 17:53 17:59 18:05 18:08 18:10 18:14 18:21 18:22 18:23 18:28 18:29 18:32 18:38 18:39 18:40 18:43 18:46 18:55 18:58 19:01 19:07 19:15 19:16 19:18 19:22 19:23 19:25 19:33 19:37 19:38 19:45 19:46 19:47 19:55 19:56 19:57 19:59 20:04 20:09 20:10 20:17 20:19 20:20 20:27 20:29 20:32 20:33 20:34 20:36 20:38 20:39 20:41 20:44 20:48 20:51 20:52 20:55 20:58 21:00 21:01 21:02 21:04 21:08 21:10 21:12 21:18 21:20 21:23 21:25 21:27 21:29 21:31 21:37 21:39 21:44 21:49 21:51 21:57 22:08 22:16 22:22 22:29 22:30 22:35 22:37 22:42 22:44 22:45 22:46 22:48 22:58 23:00 23:01 23:04 23:11 23:12 23:14 23:17 23:22 23:23 23:24 23:36 23:58
67.195.114.240 ---- 00:04 01:35 06:03 07:00 07:27 07:35 09:14 09:24 11:57 13:15 13:52 15:04 15:44 15:51 16:26 18:37 20:12 23:49 23:54
(中略)
121.116.165.163 ---- 13:09 13:13 13:16
122.27.63.237 ---- 16:57
124.212.85.180 ---- 02:23 02:25 02:26 02:27 02:28 02:30
124.41.49.139 ---- 20:05
124.74.70.222 ---- 12:02
125.196.182.126 ---- 03:57
125.204.64.118 ---- 02:13 07:20
125.28.214.18 ---- 17:56
126.109.25.167 ---- 15:30
126.206.177.172 ---- 20:00 20:01
157.55.16.229 ---- 19:42
163.139.54.129 ---- 22:27
164.71.1.222 ---- 00:59
174.120.238.187 ---- 18:09
174.120.238.190 ---- 05:18
180.11.130.20 ---- 12:29 12:30
201.223.44.31 ---- 14:12
202.180.34.186 ---- 00:22 00:23 00:24 00:25 00:26 07:56 07:58 07:59
203.104.98.218 ---- 12:36 14:38
203.104.98.220 ---- 18:36 20:35
203.104.98.221 ---- 05:23 22:39
203.142.199.76 ---- 21:55 22:55 23:55
(後略)

Comments

Comment
-F[/:" "]

フィールドセパレータ複数文字指定。
ここだと、「/」「:」「 」を指定している。(最後のは半角空白)

{T[$1]=T[$1]" "$2}

文字の連結をしている。
awkには、文字連結の方法って特にないので、そのまま並べて書くだけ。