Если у тебя ОП не хватит чтобы держать даже все строки без повторов то тут алгоритм в заключается в том чтобы открыть поток, считать первую строку, записать её в второй поток, далее вторую строку читаешь, пробегаешься по предыдущим строкам в потоке записывая их во временную переменную, если нет копий, записываешь и т д