私はかなり大きな(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 DATABASE
stringsより前にありますx
。上記のスクリプトは、以下を書くのと同じです。
awk '{
if(/CREATE DATABASE/){i=i+1; x="F"i;}
if(x!=NULL){print > x }
}' file2