32nd Diary

トップ | 最新 | 過去の日記 | もっと過去の日記

2006年
3月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
めーるあどれす
ruby -rbase64 -e'puts Base64.decode64 %q(dGFrYW5vMzJAZ21haWwuY29t)'



2006-03-24 (Friday) [長年日記]

[awk][UNIX][Net] アクセスを逆引きしてぼけーっと眺める #3

awkについてRoccoさんときむらさんから教えていただきました. ありがとうございます!

ホスト名を逆引きして表示するだけならば,

# tail -f /var/log/apache2/access.log |
  gawk '{system ("dig -x " $1 " +short")}'

のように表現できますね. systemを使っているので,fflushも不要ですね. うつくすぃ.すばらすぃ.

教えていただいたこと(後方参照の置換*1)を元に, アクセスを逆引きしてぼけーっと眺める #2 のシェルスクリプトと同様の情報を表示する *2 awkスクリプトを書いてみたところ, 以下のようになりました.

#!/usr/bin/gawk -f
{
  addr = $1
  time = gensub(/^[^:]*:([^ ]*).*/, "\\1", 1, $0)
  req = gensub(/^[^"]*("[^"]*").*/, "\\1", 1, $0)
  stat = gensub(/^[^"]*"[^"]*" ([^ ]*).*/, "\\1", 1, $0)
  ("dig -x " addr " +short | tail -n 1")| getline host
  printf "%s %15s %40s %s %s\n", time, addr, host, stat, req
  fflush()
}
# tail -f /var/log/apache2/access.log | ./al.awk

digの出力が空のときに意図したように動いていないですけども, こんな感じでしょうか. うむぅ,なかなか簡単に書けませんでした残念.

ダブルクォートがでてくるテキストはちょっとつらいですね. Quoted fields containing field separator も参考になりました.ありがとうございます.

*1 日記には間違えて前方参照の置換と書いてしまいました.すみません.

*2 IPアドレス,時刻,HTTPのリクエスト,ステータスコード,ホスト名を桁合わせして表示

[Game][Univ] 研究室の追いコン

修士を修了した方々,お疲れ様でした. これからのご活躍を期待しています!!

話題としては 「とりあえずビール」という名前のビールが 考案されたことがあるらしい,という話が興味深かったです. 店に入って,「とりあえず」といって頼むと 「とりあえずビール」が出てくる,みたいな感じ. 思わず「おあいそ」って名前のビールあったら無限ループしねぇ? とか考えたりしてね.

飲み会の後は研究室に戻り, ニュー速VIPのストリーミング中継で マリオブラザーズ2の最速クリアとか マイケル・ジャクソンズ・ムーンウォーカーの クリア動画とかを見る. んで,なんか,よくわかんないうちに徹夜していてビビりました.

朝帰宅,寝る.そして今(25日午後)に至る.

本日のツッコミ(全1件) [ツッコミを入れる]
Rocco (2006-03-25 (Saturday) 21:15)

awk で system("") での flush の件は、ドキュメントに書かれていましたね。一度全て目を通さねば…。

本日のPingbacks(全0件)