Wyszukiwanie wzorców podanych w pliku jest czasochłonne i zasobożerne. Zrobiłem małe doświadczenie dla pliku początkowego mającego 19300 linii i plików szukaj/* (11 plików: od 4 do 11100 linii, łącznie 19100). Sprzęt to 32-bitowy procesor i 3,2 GB pamięci. Eksperyment zakończył się komunikatem: "grep: pamięć wyczerpana" przy wysyceniu pamięci przez grep na poziomie 87%.
W przypadku braku pamięci możesz podzielić zadanie na mniejsze kawałki (ostateczny wynik znajduje się w pliku resztki.txt, całość będzie wykonywać się znacznie dłużej, ale unikniemy problemów z pamięcią):
Kod: Zaznacz cały
mv szukaj/plik1.txt plik1.txt # wydzielamy pierwszy plik z katalogu szukaj
grep -vf plik1.txt 5.txt > resztki.txt # resztki.txt zawiera różnicę zbiorów (5.txt \ plik1.txt)
for F in szukaj/*; do # przetwarzamy w pętli pozostałe pliki j.w.
echo "Plik: ${F}"
grep -vf "${F}" resztki.txt > resztki2.txt
mv resztki2.txt resztki.txt
done
Jeśli któryś z plików w szukaj będzie za duży i pojawi się komunikat o unicestwieniu lub braku pamięci, podziel go na mniejsze. Np.:
Kod: Zaznacz cały
split -nl/2 szukaj/plikX.txt szukaj/plikX.txt
rm szukaj/plikX.txt