Mam plik, który rośnie około 200 000 wierszy dziennie, i wszystko składa się z bloków po trzy linie jako takie:
1358726575123 # key
Joseph Muller # name
carpenter # job
9973834728345
Andres Smith
student
7836472098652
Mariah Anthony
dentist
Teraz mam inny plik, z którego wyodrębniam około 10 000 wzorców kluczy, takich jak 1358726575123
. Następnie uruchamiam for
pętlę z tymi wzorami i muszę je porównać z pierwszym plikiem. Jeśli plik nie zawiera takiego wzorca, zapisuję go w trzecim pliku do dalszego przetwarzania:
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
Przykładowy kod przechwytuje ogromny plik 10 000 razy, a tę pętlę uruchamiam mniej więcej raz na minutę, przez cały dzień .
Ponieważ ogromny plik wciąż rośnie, co mogę zrobić, aby to wszystko przyspieszyć i zaoszczędzić trochę procesora? Zastanawiam się, czy posortowanie pliku według klucza (jeśli tak, to w jaki sposób?) Czy użycie db zamiast zwykłego tekstu pomogłoby ...