dividindo um dump MySQL usando o awk

1

Eu tenho um arquivo de despejo MySQL grande-ish (250G) do qual eu só quero / preciso de um banco de dados. Eu estava esperando usar o awk para dividir o arquivo, então fiz algumas pesquisas e encontrado esta expressão:

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

Parece ser um bom começo (e funciona bem usando o arquivo de exemplo), mas é executado como:

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

me dá erros assim:

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

Outras páginas (do SE) informam que isso ocorre devido a uma linha em branco.

Eu adoraria usar essa técnica para obter a parte que quero deste arquivo, mas meu conhecimento da sintaxe do awk é (claramente) bastante limitado. Existe alguma maneira de fazer isso funcionar?

    
por ethrbunny 11.10.2014 / 14:06

1 resposta

4

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á. Em qualquer caso, para corrigir o erro que você está recebendo, use este:

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

Isso modifica o script para tentar imprimir apenas no arquivo x se a variável x estiver definida. O erro que você estava recebendo era porque ele estava tentando imprimir todas as linhas, algumas das quais aparentemente estão antes da string CREATE DATABASE , ponto no qual x não estava definido. O script acima é equivalente a escrever:

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

Tags