awk

awkで特定のカラムに文字列が含まれているか判定

awk を使ってテキスト解析をする際に、目的の値が決まった場所にあれば楽なのですがそうでない時もあります。

今回は apache のアクセスログのリクエスト URL の中から、特定のリクエストパラメータが含まれているログを抽出したいと思います。

ただし、ログは「リクエストURL」だけではなくすべての項目が欲しいと仮定します。

アクセスログで邪魔な項目

フィルタリングを掛ける際に邪魔になってくるのが、リファラーが出力されているケースですよね。

単純に grep してしまうと、リクエスト URL には該当パラメータがないのに、リファラーに存在するために引っ掛かってしまうこともよくあります。

そこで、awk で特定のカラムに該当文字列が存在するかどうかを判定させたいと思います。

もし、ログ全体($0)が不要であれば、awk でカラムを特定してから grep してもいいのですが、全体が欲しい場合は特定のカラムに対して条件判定を入れます。

ここでは、リクエスト URL の最初のパラメータに param、値に hoge_ から始まる文字列があると前提条件を置いておきます。

まあ、こういったメモ的なものは残しておくと数年後にも役に立ったりするので、忘れないうちに書き残しておきたいと思います。