J'ai un fichier qui augmente d'environ 200 000 lignes par jour, et il est formé de blocs de trois lignes en tant que tels:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Maintenant, j'ai un autre fichier à partir duquel j'extrais environ 10 000 modèles de clés, tels que 1358726575123
. Ensuite, je lance une for
boucle avec ces modèles et je dois les comparer avec le premier fichier. Si le fichier ne contient pas un tel modèle, j'enregistre le modèle dans un troisième fichier pour un traitement ultérieur:
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
L'exemple de code récupère un énorme fichier 10 000 fois et j'exécute cette boucle environ une fois par minute, pendant toute la journée .
Étant donné que l'énorme fichier continue de croître, que puis-je faire pour accélérer tout cela et économiser du processeur? Je me demande si le tri du fichier par sa clé (si oui, comment?) Ou l'utilisation d'une base de données au lieu de texte brut aiderait ...