dividindo um dump do MySQL usando awk

dividindo um dump do MySQL usando awk

Eu tenho um arquivo de despejo MySQL grande (250G) do qual desejo/preciso apenas de um banco de dados. eu esperava usarestranhopara dividir o arquivo, então fiz algumas pesquisas eencontradoesta expressão:

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

Parece um bom começo (e funciona bem usando o arquivo de amostra), mas executá-lo como:

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

me dá erros como este:

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

Outras páginas (da SE) relatam que isso se deve a uma linha em branco.

Eu adoraria usar essa técnica para obter a parte que desejo deste arquivo, mas meu conhecimentoestranhoa sintaxe é (claramente) bastante limitada. Existe alguma maneira de fazer isso funcionar?

Responder1

Não sei se isso resolverá seu problema real. Como você não nos mostrou o arquivo de entrada real, não tenho ideia se o que você está tentando funcionará. De qualquer forma, para corrigir o erro que você está recebendo, use isto:

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

Isso modifica o script para tentar imprimir no arquivo apenas xse a variável xestiver definida. O erro que você estava recebendo era porque ele estava tentando imprimir todas as linhas, algumas das quais aparentemente estão antes da CREATE DATABASEstring em que o ponto xfoi desativado. O script acima equivale a escrever:

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

informação relacionada