Я сделал нечто подобное только в сценариях на Unix с использованием shell и perl, однако теория может измениться.
Шаг 1, отсортируйте оба файла, чтобы они были в порядке по одним и тем же критериям. Для этого я использовал команду сортировки unix (мне потребовался уникальный флаг, но вам просто нужна какая-то сортировка файлов с эффективным использованием памяти). Это, вероятно, самая сложная часть, чтобы выяснить самостоятельно.
Шаг 2, откройте оба файла и, по существу, отсканируйте их построчно (или запись за записью в двоичном формате). Если строка в левом файле равна строке в правом файле, то строки совпадают и перемещаются дальше (помните, что мы уже отсортировали файл, поэтому наименьшая запись должна быть первой).
Если левая запись больше правой записи, ваша правая запись отсутствует, добавьте ее в свой список и прочитайте следующую строку в правом файле. И просто проверь снова. То же самое применимо, если вы правы, запись больше, чем вы оставили запись отсутствует, сообщите об этом и продолжайте.
Сканирование записей должно быть очень эффективным с точки зрения памяти. Это может быть не так быстро, но для меня я смог записать несколько гигабайт данных с несколькими проходами, просматривая разные поля за пару минут.