Вы можете отсортировать их, а затем выполнить «сортировку слиянием», которая фактически не объединит, но обнаружит, что вы дублируете / дублируете. В Википедии есть хорошие ссылки на это.
Для сортировки такого объема данных, вероятно, требуется больше памяти, чем у вас есть. Я не знаю, сможет ли Unix sort (доступный и в Windows / Mac) справиться с этим, но любая база данных SQL может это сделать.
Другая возможность - использовать радикальное дерево в названиях ваших белков (те, которые начинаются с A, переходят в корзину A, B - в корзину B и т. Д.). Затем просто переберите 4 миллиарда слов и найдите совпадения (вам, вероятно, нужно реализовать более одного глубокого радикального биннинга, чтобы отбрасывать больше белков одновременно).