awkを使用してMySQLダンプを分割する

awkを使用してMySQLダンプを分割する

私はかなり大きな(250G)MySQLダンプファイルを持っており、1つのデータベースしか必要ないか必要です。使いたかっただろうアッファイルを分割しようとした検索確立されたこの表現は:

awk '/START/{x="F"++i;}{print > x;}' file2

良いスタートだと思いますが(例ファイルを使用するとうまくいきます)、次のように実行します。

awk '/CREATE DATABASE/{x="F"++i;}{print > x;}' file2

次のエラーが発生します。

awk: (FILENAME=dump_all.sql FNR=1) fatal: expression for `>' redirection has null string value

SEの他のページでは、これは空行が発生したために発生したことを報告します。

私はこのテクニックを使ってこのファイルの欲しい部分を手に入れたいのですが、私の知識はアッ構文は(明らかに)非常に制限的です。これを行う方法はありますか?

ベストアンサー1

これが実際の問題を解決するかどうかわかりません。実際の入力ファイルを表示していないため、試してみるのがうまくいくかどうかはわかりません。とにかく発生したエラーを修正するには、次のコマンドを使用します。

awk '/CREATE DATABASE/{x="F"++i;}(x){print > x;}' file2

xこれにより、変数が設定されている場合にのみファイルに印刷しようとするスクリプトが変更されます。xあなたが得るエラーはすべての行を印刷しようとするために発生し、その一部は明らかにunset CREATE DATABASEstringsより前にありますx。上記のスクリプトは、以下を書くのと同じです。

awk '{
      if(/CREATE DATABASE/){i=i+1; x="F"i;}
      if(x!=NULL){print > x }
     }' file2  

おすすめ記事