日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です。微力ながら共著させていただいた「シェル・ワンライナー160本ノック」をよろしくお願い申し上げます。

福岡サテライト会場より

今日は第16回シェル芸勉強会遠隔参加するため、福岡サテライト会場を開催いたしました。場所はAIP Cafe。会員になれば、福岡で勉強会などを無料で開催出来ます。

問題作成と解説の上田さん、ありがとうございます。参加者の皆様お疲れ様でした。

参加者数は私を含めて7人でした。会場こんな感じです。大きなホワイト壁に、私のMacbook Airでプロジェクタに写しながら参戦しました。 円卓が4つあり、2人ずつ座っています。この会場だと8人くらいかな?と思いました。?10人は多すぎるかもしれないです。

問題と解答

さて今回のお題は、Apache HTTPdのログをゴリゴリ解析でした。

問題と解答は、勉強会主催者の上田さんが公開されているページをご覧ください。 b.ueda.tech

勉強会開始

データを扱う形式の勉強会でしたが、一番難しいのは問題自体よりも準備1では??ということに。 肝心の準備でなかなか上手くいかず、置いてけぼり状態になっちゃいました・・・私の解答だとログにへんなデータが入っている関係でうまく行きません。

そしていきなり福岡サテライト会場置き去り問題が発生しました。 とりあえず準備が不要な分の問題について考えていくことにしました。 後で勉強会主催者上田さんの解答をgistに貼り付けてもらうことで、何とか追いつくことが出来ました。

あと細かいことですが、Mac標準のzcatはcompress形式しか扱えないんですね・・・gzip圧縮のファイルはgzcat使えということです。

さて、自分なりの回答を記載記載します。Q1〜Q4は、置いてけぼりくらっていたり、出題者上田さんとほぼ同じ解答でした。 準備2はいろいろ考えましたが、出題者上田さんの解答で助かりました。awk便利ですね。

準備1

シェル芸本にもあった、GNU dateコマンドのフィルタモードでこんな解答を作りました。 しかし、ログに変なデータが入っててtrコマンドでエラー発生。他の参加者はtrの代わりにsed使って回避していたようです。

$ paste <(cat access_log.nasa | LANG=C ggrep -o '\[.*\]' | tr '/' ' ' | tr -d '[]' | sed 's/:/ /' | sed 's/-0400//' | gdate -f - '+%Y%m%d %H%M%S') access_log.nasa | tr '\t' ' '

Q5

ダブルクォーテーション区切りのデータと考えてやってみました。 しかしダブルクォーテーションが他でも入っている可能性があるのでこれは不完全ですね。 しかも問題勘違いして、IPアドレス毎に通信量集計しちゃいました・・・

$ awk '-F"' '{print $1,$3}' danger_log | self 3 9 | sort -k1,1 | sm2 1 1 2 2 | sort -rn -k2,2 | head -n 10

Q6

手っ取り早いのでTukubaiコマンド使っちゃいました・・・grepフィルタモードで解きました。

$ ls ???????? | ggrep -v -f - <(mdate -e 19950701 19950831 | tarr)

ちょっと難しすぎ〜という方から、Tukubai気に入った!という方までいろいろでした。 次回も是非!という参加者いらっしゃったので、良かったかなと思います。

会場がゴミとか置いてけないので、ビアバッシュ的なものを開くのには向いておりません。その辺どうすっかな〜。