元のスローログ
大体こんな感じで出力されてると思います。
# Time: 140210 15:00:00
# User@Host: ...
# Query_time: 1.99999 ...
...
ワンライナー
grep -A2とかやって複数行出力すると、--
で区切られて出力されます。これを利用してます。
-0777は-nオプションの1行つづ取り出すのを無効にするためにつけてます。大きいファイルだときついかもしれません。
この出力を3行ずつでsplitして、/s
で.
を改行にもマッチさせるようにし、TimeとQuery_timeをパースしてそれぞれ一行にして出力させます。
$ cat mysql_slow.log | grep Time -A2 | perl -0777 -nE 'for(split(/--/,$_)){if(/Time: (?<date>.+?) (?<time>.+?)\n.*Query_time: (?<response>.+?) /s){say "20$+{date} $+{time}\t$+{response}"}}'
出力結果
20140210 15:00:00 1.999999
20140210 15:00:30 2.888888
20140210 15:01:00 3.777777