Я пытаюсь объединить два файла, отсортировать их по фамилии, удалить дубликаты и сохранить их в новом файле.
Файл: "имя фамилия"
ФайлА + ФайлБ --> ФайлС
Я попробовал это с помощью команды сортировки:
sort -uk2 файлA файлB > файлC
Проблема в том, что эта команда удаляет имена с одинаковыми фамилиями, но разными именами.
"Ганс Смит" + "Ганс Смит" --> должен остаться только один "Ганс Смит". «Фридрих Бауэр» + «Колин Бауэр» --> оба должны быть сохранены.
Есть идеи?
Вы можете разделить сортировку и удаление дубликатов на две операции. Сначала отсортируйте по -k2
, затем используйте uniq
для удаления дубликатов.
sort -k2 fileA fileB | uniq > fileC
Или sort
на имени тоже:
sort -u -k2 -k1 fileA fileB > fileC
Сначала отсортируйте все строки и удалите дубликаты, затем отсортируйте по второму полю:
sort -u fileA fileB | sort -k2 > fileC
К моему удивлению, это примерно в 3 раза быстрее, чем любое из двух моих предложений. Я действительно не понимаю, как это может быть. Тот, который я ожидал быть самым быстрым, sort -u -k2 -k1
оказался самым медленным :-)
Попробуйте
man uniq
?