Aufteilen eines MySQL-Dumps mit awk

Aufteilen eines MySQL-Dumps mit awk

Ich habe eine ziemlich große (250 GB) MySQL-Dump-Datei, von der ich nur eine Datenbank haben möchte/brauche. Ich hatte gehofft,awkum die Datei aufzuteilen, also habe ich ein bisschen gesucht undgefundendieser Ausdruck:

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

Scheint ein guter Anfang zu sein (und funktioniert gut mit der Beispieldatei), aber führen Sie es folgendermaßen aus:

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

gibt mir Fehler wie diesen:

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

Andere Seiten (von SE) berichten, dass dies auf eine leere Zeile zurückzuführen ist.

Ich würde diese Technik gerne verwenden, um den gewünschten Teil aus dieser Datei zu erhalten, aber mein Wissen überawkDie Syntax ist (offensichtlich) ziemlich eingeschränkt. Gibt es eine Möglichkeit, dies zum Laufen zu bringen?

Antwort1

Ich weiß nicht, ob das Ihr eigentliches Problem lösen wird. Da Sie uns die eigentliche Eingabedatei nicht gezeigt haben, habe ich keine Ahnung, ob das, was Sie versuchen, überhaupt funktionieren wird. Um den angezeigten Fehler zu beheben, verwenden Sie auf jeden Fall Folgendes:

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

Dadurch wird das Skript so geändert, dass nur versucht wird, in eine Datei zu drucken, xwenn die Variable xgesetzt ist. Der Fehler, den Sie erhalten haben, lag daran, dass versucht wurde, alle Zeilen zu drucken, von denen einige anscheinend vor der CREATE DATABASEZeichenfolge liegen, an der die xVariable nicht gesetzt wurde. Das obige Skript entspricht dem Schreiben von:

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

verwandte Informationen