Сравнивайте два несортированных файла построчно и только выходные строки, которые находятся в файле 1 И в файле 2, но не в файле 1

Мне нужно сравнивать два несортированных файла построчно и только выходные строки, которые находятся в файле 1 и файле 2, но не в файле 1. По сути, я получаю новые + те же строки из каждого из двух файлов, и исключая старые / не существующие строки.

Мне нужно сделать это на некоторых очень больших файлах. (10+ ГБ) (около 1 000 000 строк).

Я попробовал несколько из следующих вариантов, но ничто не дает мне именно то, что мне нужно:

join -v1 -v2 <(sort File1.txt) <(sort File2.txt) > File3.txt

Это «соединение», кажется, дает мне строки, которые находятся в File1.txt И / ИЛИ File2.txt. (По сути, давая мне комбайн + уникальная команда). (Это почти правильно, но мне нужно это, чтобы исключить строки / строки, если они не во втором файле, но находятся в первом файле.

fgrep -vf File1.txt File2.txt > File3.txt

Это работает, но, как вы знаете, очень медленно работает с большими файлами и на самом деле не вариант.

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

Еще раз спасибо заранее.

-3

Решение

Не совсем понятно, что вы пытаетесь сделать, но попробуйте это:

comm <(sort File1.txt) <(sort File2.txt)

а также man comm за любые аргументы вам нужны.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]