Loading... (0%)

便利なawkの使い方

2017.07.08

エンジニア兼営業を担当しているきーちゃんです。

障害対応などでログファイルを調査することがあると思います。
その場合、みなさんはどうやって実施していますか?

サーバーがUNIXの場合、ローカル環境へファイルを持ってきて、Windows上でsakuraのgrepや複雑な場合は、VBAなどのプログラムで対応している方も多いのではないでしょうか。

今回、UNIX環境限定ではありますが、awkを使った便利な調査方法の一部をご紹介いたします。(SQLが記載されたログファイル調査)

実行SQLが出力されたログファイルから、SQL文を1行にまとめる

例えば、以下のようなSQL文が出力されているログファイルがあるとします。

このログからユーザ名やSQLIDでGREPするとその行のみしか出力されず、条件に指定している値も必要だとします。(値は可変で調査では不明)
その場合、以下のコマンドを実行することで1行にまとめることができます。
※まとめた後にgrepすれば調査可能

awk ‘{
if ( $0 ~ /^;/ ) { flg=0 } else { ORS=” “; flg=1 }
if ( flg == 1 ) { print $0; }
else { ORS=”\n”; print $0; }
}’ ログファイル名 > 結果ファイル名

あるユーザが特定の時間のみ実行したSQLのみを抽出

↑と同じようなログファイルで、以下のようにすれば抽出することができます。

awk ‘$4 ~ ユーザID/ { flg==1; } $0 ~ /^;/ { if ( flg==1 ) print$0; flg=0 }
{ if ( flg == 1 ) print $0; }’ ログファイル名 |
awk
‘$0 ~ /^– 2016\/09\/30 11:00/ { flg=1; }
$0 ~ /^– 2016\/09\/30 11:10/ { flg=0; }
{ if ( flg == 1 ) print $0; }’ > 結果ファイル名

今回は、awkのほんのさわり部分ですので、極めればもっといろんなことができます。
(私も極めているわけではないですが・・・)
環境があればぜひ触れてみてください。

Copyright(c)LifeBox Co.Ltd All RightsReserved.