2012/05/26

【awk】ログとかから任意のパラメータ値を取り出す


↓こーいう ログがあったりする test.log
127.0.0.1 - - [2011-07-08 10:38:39] "GET /hoge.php?uid=9999&shop_id=000000 HTTP/1.1" 200 2011 "-" "DoCoMo/2.0 SH905i(c100;TB;W24H15)" "uid=9999" "shop_id=000000"
↑これの uidとshop_idを取り出す
awkスクリプト作る get_log_param.awk

# アクセスログとかから、欲しいパラメータだけ取り出すスクリプト
#
# usage: awk -f get_log_param.awk [log file path...]
{
 # shop_id
 shop_id = match($0, /shop_id=[0-9]+/)
 if (shop_id != 0) { shop_id = substr($0, shop_id+8, RLENGTH-8) }
 # uid
 uid = match($0, /uid=[0-9]+/)
 if (uid != 0) { uid = substr($0, uid+4, RLENGTH-4) }
 if (shop_id != 0) {
  printf "shop_id=%d | ", shop_id
 }
 if (uid != 0) {
  printf "uid=%d", uid
 }
 print ""
}


実行
awk -f get_log_param.awk test.log
shop_id=204066 | uid=10009158
shop_id=197514 | uid=10018366
shop_id=205051 | uid=10010135
shop_id=218547 | uid=10003620
shop_id=220207 | uid=10001037
shop_id=203185 | uid=10103004
参考)
corbieのブログ:iptablesログの抽出
awk sed 入門
Awkプログラミング入門-第5回




0 件のコメント: