/var/log/apache2/other_vhosts_access.log
次のファイルが与えられた場合:
example.com:443 1.1.1.1 - - [25/Jan/2021:12:00:00 +0000] "GET /abc/def/ghi?token=jklm12 HTTP/1.1" 200 1000 "-" "Mozilla/5.0 (Macintosh; Intel...
example.com:443 2.2.2.2 - - [25/Jan/2021:12:00:00 +0000] "GET /abc/def/ghi?token=jklm13 HTTP/1.1" 200 1000 "-" "Mozilla/5.0 (Macintosh; Intel...
example.com:443 33.33.33.33 - - [25/Jan/2021:12:00:00 +0000] "GET /abc/def/ghi?token=jklm14 HTTP/1.1" 200 1000 "-" "Mozilla/5.0 (Macintosh; Intel...
example.com:443 4.4.4.4 - - [25/Jan/2021:12:00:00 +0000] "GET /abc/def/ghi?token=jklm12 HTTP/1.1" 200 1000 "-" "Mozilla/5.0 (Macintosh; Intel...
URLを「基準」にグループ化したIPを集計する方法は?
例:
/abc/def/ghi?token=jklm12
1.1.1.1
4.4.4.4
/abc/def/ghi?token=jklm13
2.2.2.2
/abc/def/ghi?token=jklm14
33.33.33.33
特定の列を抽出するために使用できることを知っていますが、awk
「グループ化」を実行する方法は?
答え1
awk '{a[$8]=a[$8] "\n\t" $2} END{for (url in a) print url, a[url]}' file
配列はa
最初は空です。
{a[$8]=a[$8] "\n\t" $2}
a[$8]
改行とタブで要素の値を展開し、2番目のフィールドを展開します。END
このブロックは、ファイル全体を解析した後にのみ実行されます。配列の各キーに対して、キー(url
)と関連値()が印刷されます。a[url]
出力:
/abc/def/ghi?token=jklm14
33.33.33.33
/abc/def/ghi?token=jklm12
1.1.1.1
4.4.4.4
/abc/def/ghi?token=jklm13
2.2.2.2