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, x
wenn die Variable x
gesetzt ist. Der Fehler, den Sie erhalten haben, lag daran, dass versucht wurde, alle Zeilen zu drucken, von denen einige anscheinend vor der CREATE DATABASE
Zeichenfolge liegen, an der die x
Variable 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