Мне нужно сравнивать два несортированных файла построчно и только выходные строки, которые находятся в файле 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
Это работает, но, как вы знаете, очень медленно работает с большими файлами и на самом деле не вариант.
Чувствительность к регистру была бы хорошей, но совсем не обязательной. Причина, по которой я упоминаю об этом, заключается в том, что в своем исследовании я обнаружил, что если сравнение не учитывает регистр, это значительно ускорит поиск.
Еще раз спасибо заранее.
Не совсем понятно, что вы пытаетесь сделать, но попробуйте это:
comm <(sort File1.txt) <(sort File2.txt)
а также man comm
за любые аргументы вам нужны.
Других решений пока нет …