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 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 CREATE DATABASE
string em que o ponto x
foi desativado. O script acima equivale a escrever:
awk '{
if(/CREATE DATABASE/){i=i+1; x="F"i;}
if(x!=NULL){print > x }
}' file2