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 forloop 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 ...