Eu tenho um arquivo que cresce cerca de 200.000 linhas por dia e é formado com blocos de três linhas, como tal:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Agora, tenho outro arquivo do qual extraio cerca de 10.000 padrões de chaves, como 1358726575123
. Então eu corro um for
loop com esses padrões e tenho que compará-los com o primeiro arquivo. Se o arquivo não contiver esse padrão, salve o padrão em um terceiro arquivo para processamento adicional:
for number in $(grep -o '[0-9]\{12\}' file2); do # finds about 10.000 keys
if ! grep -q ^$number$ file1; then # file1 is a huge file
printf "$number\n" >>file3 # we'll process file3 later
fi
done
O código de exemplo recebe um arquivo enorme 10.000 vezes e eu corro esse loop cerca de uma vez por minuto, durante o dia inteiro .
Como o enorme arquivo continua crescendo, o que posso fazer para acelerar tudo isso e economizar um pouco de CPU? Gostaria de saber se classificar o arquivo de alguma forma por sua chave (se sim, como?) Ou usar um db em vez de texto sem formatação ajudaria ...