2011-06-27 9 views
2

私はInsert文を抽出するSQLダンプファイルを持っています。私はawkを使ってこれをしようとしています。awkを使用してファイルから行を抽出する

挿入ステートメントは複数の行にまたがります。彼らはINSERTで始まり、セミコロンで終わります。

私が使用して試してみました:

awk '/INSERT*;/' dump.sql 

しかし、それは動作しません。これを行う正しい方法は何ですか? (私のgoogle-fuはこれで失敗しました)

ありがとう!

+0

データにセミコロンが含まれていない場合は、 'FS =;'を設定してSQL文のレコードを分割できます。 – sarnold

+0

regexが間違っています、 '/ INSERT。*; /'、またはより良い '/^INSERT。*; $ /'でなければなりません。私のMySQLダンプが複数の行にまたがっていないことを確認しました。 –

+0

。*表記は意味がありますが、動作していないようです。ダンプファイルはセミコロンを間違いなく区切り文字として使用します。ダンプファイルを 'cat'すると、複数の行にまたがっています。 ( '^'と '$'を使わないほうが良いでしょう。前後にスペースがあるように思われるからです)。 – Akshay

答えて

3

のように:ideone here

+0

二重の '/ x /、/ y /'はどういう意味ですか?この構文を説明するリンクをいくつか用意してください。ありがとう! – Akshay

+0

@Aku http://sunsite.ualberta.ca/Documentation/Gnu/gawk-3.1.0/html_chapter/gawk_8.html#SEC110 –

+0

"double/x /、/ y/matchesは何を意味しているのですか"これは "ラインアドレッシング "。これは、INSERTで始まる行から終わる行までのすべてを表示することを意味します。 – cdarke

0

私はちょうどあなたの "複数行マッチングのためawk '/INSERT.*;/' dump.sql

+0

いいえ、どちらもうまくいきません... – Akshay

1

このような何か(または何@belisariusが示唆)で動作している

/^INSERT/, /.*;/ {print} 

に動作します:

レコードセパレータを設定
awk '{ if ($1 ~ /^\s*INSERT/) print $0 ";" }' RS=";" dump.sql 

かなりシンプルでよく文書化されています:

http://www.gnu.org/software/gawk/manual/html_node/Multiple-Line.html

@ belisariusの解決策のようにダブルマッチの参照が見つからないようですが、私はそれがより好きです。

関連する問題