У меня есть 2 больших текстовых файла (~ 500M, ~ 15GB ea), которые выглядят так:
FileP.txt:
test@test.com:testtest test@test.com1:testtest1 test@test.com2:testtest2 test@test.com3:testtest3 test@test.com4:testtest4
FileE.txt
test@test.com:testtest
test@test.com0:testtest0
test@test.com2:testtest2
test@test.com3:testtest3
test@test.com5:testtest5
(Обратите внимание, что в FileE.txt
есть строки, которых нет в FileP.txt
. Я не хочу, чтобы те включены. Жирные линии - это строки, которые должны заканчиваться в output.txt
, поскольку их нет в FileE.txt
.)
Я хочу запустить FileE.txt
против FileP.txt
и удалить все строки, которые были найдены в FileE.txt
из FileP.txt
и вывести их в новый файл.
Это должно выглядеть так:
output.txt:
test@test.com1:testtest1 test@test.com4:testtest4
Я попробовал несколько команд,
Вот моя команда grep:
$ grep -Fvxf FileE.txt FileP.txt > output.txt
Тем не менее, я получаю эту ошибку (очевидно, потому что файлы слишком велики):
grep: memory exhausted
Для тех, кто заинтересован, запуск $ ulimit -a
возвращает:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 2032
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
Итак, мой вопрос, что было бы наиболее эффективным и простым способом завершить этот процесс?
ПРИМЕЧАНИЕ. Файлы не отсортированы.