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

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

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

awk を使ってテキスト解析をする際に、目的の値が決まった場所にあれば楽なのですがそうでない時もあります。今回は apache のアクセスログのリクエスト URL の中から、特定のリクエストパラメータが含まれているログを抽出したいと思います。ただし、ログは URL だけではなくすべての項目が欲しいと仮定します。

その際、邪魔になってくるのがリファラーが出力されている場合。単純に grep してしまうと、リクエスト URL には該当パラメータがないのに、リファラーに存在するために引っ掛かってしまうこともよくあります。そこで、awk で特定のカラムに該当文字列が存在するかどうかを判定させたいと思います。

もし、ログ全体($0)が不要であれば、awk でカラムを特定してから grep してもいいのですが、全体が欲しい場合は特定のカラムに対して条件判定を入れます。ここでは、リクエスト URL の最初のパラメータに param、値に hoge_ から始まる文字列があると前提条件を置いておきます。

awk -F' ' '($7 ~ /?param=hoge_/)' access_log

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

最終更新日:

関連記事

人気記事

新着情報