Tengo un archivo que crece aproximadamente 200,000 líneas por día, y todo está formado con bloques de tres líneas como tales:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Ahora, tengo otro archivo del que extraigo unos 10,000 patrones clave, como 1358726575123
. Luego ejecuto un for
ciclo con estos patrones y tengo que compararlos con el primer archivo. Si el archivo no contiene dicho patrón, guardo el patrón en un tercer archivo para su posterior procesamiento:
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
El código de ejemplo engloba un archivo enorme 10,000 veces, y ejecuto este bucle aproximadamente una vez por minuto, durante todo el día .
Dado que el gran archivo sigue creciendo, ¿qué puedo hacer para acelerar todo esto y ahorrar algo de CPU? Me pregunto si ordenar el archivo de alguna manera por su clave (si es así, ¿cómo?) O usar un db en lugar de texto sin formato ayudaría ...