dividir un volcado de MySQL usando awk

dividir un volcado de MySQL usando awk

Tengo un archivo de volcado MySQL de gran tamaño (250G) del que solo quiero/necesito una base de datos. esperaba usarawkpara dividir el archivo, así que busqué un poco yencontróesta expresión:

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

Parece un buen comienzo (y funciona bien usando su archivo de muestra), pero ejecutándolo como:

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

me da errores como este:

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

Otras páginas (de SE) informan que esto se debe a que aparece una línea en blanco.

Me encantaría utilizar esta técnica para obtener la parte que quiero de este archivo, pero mi conocimiento deawkla sintaxis es (claramente) bastante limitada. ¿Hay alguna manera de hacer que esto funcione?

Respuesta1

No sé si esto resolverá tu problema real. Como no nos ha mostrado el archivo de entrada real, no tengo idea si lo que está intentando funcionará. En cualquier caso, para corregir el error que estás recibiendo, usa esto:

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

Eso modifica el script para que solo intente imprimir en el archivo xsi la variable xestá configurada. El error que estaba recibiendo se debió a que estaba intentando imprimir todas las líneas, algunas de las cuales aparentemente están antes de la CREATE DATABASEcadena en cuyo punto xse desestableció. El guión anterior equivale a escribir:

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

información relacionada