Я пытаюсь написать сценарий 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
с выводом:
so the conversion has happened, the output file combined.txt
is UTF-8 also, so why can't I remove the duplicate lines?
комбинированный выходной файл с дубликатами
Я также проверил, есть ли конечные пробелы в объединенном файле.
Это похоже на проблему, которую многие люди видели бы раньше, но я не могу найти ответ (или, конечно, я создал неправильную строку поиска) ...