Почему sort -u или uniq не удаляют дубликаты в объединенных текстовых файлах? - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь написать сценарий bash, чтобы взять три пользовательских словаря из разных мест в моем боксе, объединить их, удалить дубликаты и затем записать их обратно в соответствующие области.

Однако, когда Я cat файлы и выполняю либо sort -u, либо uniq, повторяющиеся строки остаются:

Alastair
Alastair
Albanese
Albanese
Alberts
Alberts
Alec
Alec
Alex
Alex

Я сузил его до одного из файлов, который поступает из Microsoft Outlook / Windows и называется CUSTOM.DI C. Изучив его с помощью file -i, я обнаружил, что это был файл UTF-16le (и печатал восточные символы при непосредственном объединении с файлами UTF-8), поэтому я выполнил команду

iconv -f utf-16le -t utf-8 CUSTOM.DIC -o CUSTOMUTF8.DIC

Однако, когда Я объединяю этот файл с другими моими файлами UTF-8, он создает дубликаты, которые нельзя удалить с помощью sort -u или uniq.

Я обнаружил, что для больших файлов file -i только угадывает формат файла из первой (многих) тысяч строк, поэтому я выполнил команды

file_to_check="CUSTOMUTF8.DIC"
bytes_to_scan=$(wc -c < $file_to_check)
file -b --mime-encoding -P bytes=$bytes_to_scan $file_to_check

с выводом:

Output code of file type check

so the conversion has happened, the output file combined.txt is UTF-8 also, so why can't I remove the duplicate lines?

комбинированный выходной файл с дубликатами

Я также проверил, есть ли конечные пробелы в объединенном файле.

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

1 Ответ

1 голос
/ 05 августа 2020

Большое спасибо @ Andrew Henle - я знал, что это будет что-то простое!

Действительно, используя hexdump -c combined2.txt, я увидел, что некоторые строки заканчиваются \n, а некоторые - \r\n.

Итак, я скачал dos2unix и запустил

dos2unix combined2.txt
sort -u combine2.txt > combined3.txt

и все хорошо!

Еще раз спасибо, Эндрю!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...