V$SYSSTAT から特定のデータベース統計情報の差分を出す Perl ワンライナー

定期的(30秒間隔など)に V$SYSSTAT の情報を sysstat.log に出力しているとして、sysstat.log から "global cache blocks lost" について、時系列で差分を求めたいといったときに使う Perl ワンライナーです。

コマンド

% perl -F, -lane '/global cache blocks lost/ and printf(qq/%s,%s\n/,$F[0],$F[2]-$tmp) and $tmp=$F[2]' sysstat.log

実行結果

0904235511,0
0904235541,1
0904235611,0
0904235642,3
0904235712,0
0904235742,5
0904235813,0
0904235843,0

参考


追記(2011/12/01):
上記のように "global cache blocks lost" などの特定の統計に絞らずに全統計について処理したい場合はこんな感じ。

% perl -F, -lane 'printf(qq/%s,%s,%s\n/,$F[1],$F[0],$F[2]-$h{$F[1]})if(exists($h{$F[1]}));$h{$F[1]}=$F[2]' sysstat.log


追記(2011/12/12):
特定の除外キーワード(アイドルイベント)を含む行以外を抽出する Perl ワンライナー

% perl -F, -lane 'BEGIN{$i=0};s/[\n\r]*//g;if($i==0){$e{$_}++}else{exists($e{$F[1]}) or print};eof and $i=1' idle_event.txt sysstat.log