Я не уверен, как вы сгенерировали свои текстовые файлы, но проблема в том, что некоторые из ваших строк 1.txt
и 2.txt
не имеют согласованных окончаний строк.У некоторых есть символ CR (ctrl-M), но нет единственной строки, которую Linux ожидает для текстовых файлов.Например, один из них имеет registry^M
, который не соответствует registry
(программы Linux, которые проверяют текст, будут видеть ^M
как другой символ или пробел, но не как завершение строки, которое игнорируется).Когда вы смотрите на файл в некоторых текстовых редакторах, ^M
не отображается, поэтому кажется, что registry
одинаково в обоих местах, но это не так.
Вы можете попробовать:
dos2unix 1.txt 2.txt
comm -23 <(sort 1.txt) <(sort 2.txt) > 3.txt
dos2unix
сделает все окончания строки правильными (при условии, что они могут использовать DOS CR).Обратите внимание, что это может немного повлиять на сортировку, поэтому я тоже прибегаю к ним.Вы можете попробовать это, не прибегая к помощи, и если есть проблема, comm
выдаст ошибку, что один из файлов не отсортирован.