julianoramone
(usa Ubuntu)
Enviado em 23/08/2017 - 15:46h
foxbit3r escreveu:
Oi,
você pode tentar assim:
awk 'BEGIN {OFS="\t"; }
{
fileName = $10"_"$8".txt"
print $1,$2,$3,$4,$12 > fileName
close(fileName)
if( (NR % 100000) == 0){
print "Processado",NR,"linhas aguarde ..."
system("sleep 5")
}
}' meuarquivo.txt
Na realidade do limite não é o awk e sim do sistema operacional, pois cada programa na máquina possui um limite de quantidade total que para abrir arquivos. Isso é uma segurança do S.O.
Obrigado fox! Rodei o comando que tu sugeriu, achei genial, porque dá pra acompanhar o andamento do processo. O número total de arquivos divididos está correto, mas quando abri infelizmente o conteúdo não batia. Cada arquivo continha apenas uma linha, quando na verdade muitas linhas possuem um mesmo padrão dentre milhares de padrões diferentes em $10. Provavelmente precisa de algum pequeno ajuste neste comando, poderia testar algumas alternativas a partir do que tu escreveu, mas consegui uma solução que funciona no stackoverflow.
Segue a linha que resolveu meu problema:
awk 'BEGIN{OFS="\t";} {if(prev){close(prev)};print $1,$2,$3,$4,$12 >> ($10"_"$8".txt");prev=$10"_"$8".txt"}' meuarquivo.txt
Dado o tamanho do meu dataset (quase 4 milhões de linhas, contidas em milhares de padrões em $10), a corrida toda levou pouco mais de uma hora. Fiz uma conferencia prévia, manualmente, e parece que funcionou bem.
Agradeço aos colegas pelo tempo dispensado em me ajudar. Grande abraço!