前提
・実行環境(Linux)
1 2 3 4 |
$ uname -a Linux ip-XXX-XX-XX-XX 5.10.0-19-cloud-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux |
・下記のようなApache(httpd)のアクセスログファイルがあると想定
※Amazon Lightsail のデフォルトのアクセスログ
1 2 3 4 5 6 7 8 9 |
$ cat /opt/bitnami/apache/logs/access_log XX.XX.XX.XX - - [04/Mar/2023:02:51:33 +0000] "GET / HTTP/1.0" 400 362 XX.XX.XX.XX - - [04/Mar/2023:02:51:33 +0000] "GET / HTTP/1.0" 400 362 XX.XX.XX.XX - - [04/Mar/2023:04:21:44 +0000] "GET / HTTP/1.0" 200 362 XX.XX.XX.XX - - [04/Mar/2023:06:31:55 +0000] "GET / HTTP/1.0" 400 362 ... |
日時の情報で集計
各行の4列目にある、04/Mar/2023:02までの情報をsubstrで取得して配列の添字とした配列で件数を集計。
その後集計結果を最終的に出力。
1 2 3 4 5 6 7 8 |
$ cat access_log | awk '{a[substr($4, 0, 15)]+=1}END{for ( i in a ) { print i,a[i]}}' | sort ... [04/Mar/2023:15 18 [04/Mar/2023:16 39 [04/Mar/2023:17 69 [04/Mar/2023:18 76 |
substrの箇所を変更して日付だけ(04/Mar/2023を添字に)でももちろん集計可能です。
1 2 3 4 5 6 7 8 9 |
$ cat access_log | awk '{a[substr($4, 0, 12)]+=1}END{for ( i in a ) { print i,a[i]}}' | sort ... [04/Mar/2023 50 [04/Mar/2023 69 [04/Mar/2023 99 [04/Mar/2023 76 |
最後に
今回はアクセスログで書きましたが、特定の条件で件数を数えたいとなって、形式がバラバラの列があるとかでない限りはこちらで対応できるかと思います。
形式バラバラだった場合には、grepとかでぐりぐり頑張りましょう。
Amazon.co.jp: 1日1問、半年以内に習得 シェル・ワンライナー160本ノック Software Design plus eBook : 上田 隆一, 山田 泰宏, 田代 勝也, 中村 壮一, 今泉 光之, 上杉 尚史: 本
Amazon.co.jp: 1日1問、半年以内に習得 シェル・ワンライナー160本ノック Software Design plus eBook : 上田 隆一, 山田 泰宏, 田代 勝也, 中村 壮一, 今泉 光之, 上杉 尚史: 本
コメント