LoginSignup
0
0

More than 1 year has passed since last update.

awkコマンドについて

Last updated at Posted at 2022-09-03

awkコマンドについて

記事を書いた背景・概要

仕事でログ解析をすることが多くなりました。今まではエクセルを使って集計をやっていました。
ただ、データ量が多い場合、エクセルの動作が遅くなってきました。なにかいい方法はないかと調べたところawkコマンドに出会いました。

この記事では覚えたawkコマンドの動きや使ったことを簡単にまとめました。
備忘録的な使い方もしていますが、ご容赦ください。

awkコマンドの基本

//:TODO

実例

対象ログ

access_logの中にはこんな形

192.0.2.0 - - [11/Dec/2019:12:01:22 +0000] "GET / HTTP/1.0" 200 35 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3602.2 Safari/537.36"
198.51.100.0 - - [11/Dec/2019:12:02:22 +0000] "POST / HTTP/1.0" 200 35 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3602.2 Safari/537.36"
203.0.113.0 - - [11/Dec/2019:12:01:22 +0000] "GET / HTTP/1.0" 200 35 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3602.2 Safari/537.36"
198.51.100.0 - - [11/Dec/2019:12:02:22 +0000] "GET / HTTP/1.0" 200 35 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3602.2 Safari/537.36"

IP部分の抽出・計算

IP部分の抽出をしたい場合

何も指定しない場合、区切り文字は「 」(半角スペース)です。また、出力したい要素を$と要素番号で指定する。
$1で一番はじめの要素である、IP部分を出力する。

$ cat access_log | awk '{print $1}'
192.0.2.0
198.51.100.0
203.0.113.0
198.51.100.0

何回同じIPからアクセスが来ているかカウントしたい場合

連想配列ipMapにipをキーとして出現回数をvalueとして保持する。End部で、ipMapからipと出現回数を出力する。

「uniq -c」と「sort」コマンドでもできますが、awkコマンドだけでやってみました。

$ cat access_log | awk '{ipMap[$1]++}END{for(i in ipMap){print i,ipMap[i]}}' | sort
192.0.2.0 1
198.51.100.0 2
203.0.113.0 1

時刻部分を抽出・計算

時刻の部分は[]の間に書かれており、また、+以下のタイムゾーンはいらないので、以下を区切り文字として使います。

  • [
  • ]
  • (半角スペース)

[]は正規表現のパターンとして認識されてしまうため、バックスラッシュを前につけます。awkのリファレンスを読むとバックスラッシュ2つでバックスラッシュの意味になるので、2つつけています。(ここがわからず苦戦しました。)

$ cat access_log | awk -F'\\[|\\]| ' '{print $5}'
11/Dec/2019:12:01:22
11/Dec/2019:12:02:22
11/Dec/2019:12:01:22
11/Dec/2019:12:02:22

参考

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0