[pgsql-jp: 39047] Re: ログからのSQL文の抽出

Norio Suzuki suzuki @ tricorn.co.jp
2007年 12月 29日 (土) 17:53:42 JST


鈴木です。

At Sat, 29 Dec 2007 14:30:06 +0900,
utsumi wrote:
> 
> <2007-12-22 20:14:25 >LOG:  statement: insert into ....
> 		values(.....
> というように複数行にまたがっているsqlは当然先頭行しか抽出できません。
> この場合どうやって複数行を抽出したらよいでしょうか?

複数行になっている部分を単一行に戻すのがスジかなと思います。

ということで、「先頭に空白文字が入った行は前の行の続きである」と見なし、
それを「空白文字1つ」へ置換してしまえば良いのではないかと。

例えばこんな感じのスクリプトで。
------------------------------------------------------------------------
#!/usr/bin/perl

my $log = '';
while(<>) {
    $log .= $_;
}
$log =~ s/\n\s+/ /gm;
print $log;
------------------------------------------------------------------------
# メモリ食いな点は無視の方向でw


■入力
------------------------------------------------------------------------
<hoge1> aaaa
   bbb
   ccc
<hoge2> xxxx
   yyyy
------------------------------------------------------------------------

■出力
------------------------------------------------------------------------
<hoge1> aaaa bbb ccc
<hoge2> xxxx yyyy
------------------------------------------------------------------------

;; ---------------------------------------------------------
;; 鈴木則夫 <suzuki @ tricorn.co.jp>
;; トライコーン株式会社 http://www.tricorn.co.jp/
;; 160-0015 東京都新宿区大京町24 住友外苑ビル5F
;; Tel 03-5919-0041 Fax 03-5919-0042



pgsql-jp メーリングリストの案内