Ich habe eine Datei, die ungefähr 200.000 Zeilen pro Tag umfasst und die aus Blöcken mit drei Zeilen besteht:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Jetzt habe ich eine andere Datei, aus der ich ungefähr 10.000 Schlüsselmuster extrahiere, wie z 1358726575123
. Dann führe ich eine for
Schleife mit diesen Mustern durch und muss sie mit der ersten Datei vergleichen. Wenn die Datei kein solches Muster enthält, speichere ich das Muster zur weiteren Verarbeitung in einer dritten Datei:
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
Der Beispielcode greift 10.000 Mal nach einer riesigen Datei, und ich führe diese Schleife den ganzen Tag über etwa einmal pro Minute aus .
Was kann ich tun, um all das zu beschleunigen und CPU zu sparen, da die riesige Datei immer größer wird? Ich frage mich, ob es hilfreich ist, die Datei irgendwie nach ihrem Schlüssel zu sortieren (wenn ja, wie?) Oder eine Datenbank anstelle von einfachem Text zu verwenden ...