Как удалить повторяющиеся строки: Excel, Notepad++, командная строка и быстрый способ
Удаление повторяющихся строк из списка кажется тривиальной задачей, пока вам действительно не понадобится сделать это с реальными данными. Объедините два списка рассылки, и они столкнутся на стыке. Экспортируйте отчет по ключевым словам, и один и тот же термин появится пятнадцать раз. Вставьте файл журнала, и половина строк повторится. Существует несколько способов устранения дублирования списка, и у каждого из них есть одна проблема, о которой редко упоминают в кратких руководствах, особенно в отношении сохранения исходного порядка и обнаружения не совсем идентичных дубликатов.
Метод Excel и где он не работает
В Excel есть встроенная кнопка «Удалить дубликаты» на вкладке «Данные», и для чистых данных она работает нормально: выберите столбец, нажмите кнопку, готово. Проблемы начинаются с запутанных данных. Инструмент Excel удаляет только абсолютно идентичные строки, поэтому «яблоко» и «яблоко», одна из которых имеет завершающий пробел, считаются разными, и оба сохраняются. То же самое касается «Apple» и «apple», если вам нужно сопоставление без учета регистра; Сравнение Excel по умолчанию сохранит оба значения. И вам нужно загрузить свой список в электронную таблицу и сначала настроить его как правильный столбец, что является проблемой, если у вас есть просто блок текста.
Excel — разумный выбор, если ваши данные уже находятся в электронной таблице и являются чистыми. Для быстрого устранения дублирования вставленного текста или в случае несоответствия пробелов и заглавных букв часто это создает больше проблем, чем того стоит.
Notepad++ и проблема порядка
Notepad++ может удалять повторяющиеся строки с помощью плагина TextFX, популярного среди разработчиков Windows. Но есть существенная загвоздка: функция TextFX «удалить повторяющиеся строки» также сортирует ваши строки в алфавитном порядке в качестве побочного эффекта. Если порядок вашего списка имеет значение, хронологический журнал, ранжированный список, последовательность шагов, Notepad++ его перепутает. Вы получаете уникальные строки, но не в том порядке, в котором вы начали. Для многих задач это является препятствием.
Командная строка: sort и uniq
В Linux и macOS классический подход — команда uniq. Подвох здесь фундаментальный: uniq удаляет только повторяющиеся строки, которые находятся рядом друг с другом. Если ваши дубликаты разбросаны по файлу, uniq их пропустит. Стандартное решение состоит в том, чтобы сначала отсортировать файл и передать его в uniq, но сортировка, опять же, разрушает ваш первоначальный порядок. Существуют более продвинутые однострочники с awk, которые сохраняют порядок, но теперь вы пишете код для задачи, которая должна выполняться одним щелчком мыши, и в этом легко ошибиться.
Командная строка является мощной и поддерживает сценарии, что идеально подходит, когда дедупликация является частью более крупного автоматизированного конвейера. Для разовой работы в списке, который у вас есть, стоимость установки высока.
Общая загвоздка: почти дубликаты
Каждый метод, описанный выше, по умолчанию ловит только точные дубликаты. Но реальные дубликаты часто неточны. Один и тот же адрес электронной почты отображается как «Name@site.com» и «name@site.com». В одной и той же записи есть пробел в конце одной строки. Одно и то же имя пишется с заглавной буквы по-разному. Эти почти дубликаты проскальзывают через инструменты точного совпадения, оставляя вам список, который выглядит чистым, но на самом деле это не так. Настоящая очистка списка означает возможность игнорировать регистр и обрезать пробелы во время сравнения — опции, которые Excel и базовый uniq не предоставляют вам легко.
Быстрый способ: инструмент для браузера, который сохраняет порядок
В обычном случае у вас есть список, вам нужны уникальные строки и вы хотите сохранить исходный порядок, и самый быстрый путь — это инструмент на основе браузера. Вставьте список и мгновенно получите дедуплицированный результат, при этом первое вхождение каждой строки останется именно там, где оно было. Никаких настроек электронных таблиц, никаких плагинов, никаких команд, которые нужно запомнить, никакой принудительной сортировки. Хорошие инструменты также позволяют переключать сопоставление без учета регистра и обрезку пробелов, чтобы выявлять почти дубликаты, которые пропускают другие методы.
Поскольку инструмент на стороне клиента обрабатывает все в вашем браузере, ничего не загружается, что имеет значение, когда список представляет собой список адресов электронной почты или любые данные, которые вы не хотите отправлять на сервер. И нет никаких практических ограничений, кроме памяти вашего браузера, поэтому десятки тысяч строк обрабатываются мгновенно.
Обычный рабочий процесс: устранение дублирования, затем сортировка
Дедупликация и сортировка часто представляют собой две половины одной работы по очистке. Обычно сначала удаляют дубликаты, сохраняя порядок, а затем целенаправленно сортируют чистый результат — именно то, что вам нужно при подготовке аккуратного списка литературы, чистого набора ключевых слов или глоссария в алфавитном порядке. Выполнение этого в таком порядке означает, что вы делаете один чистый проход для уникальности и один преднамеренный проход для порядка, вместо того, чтобы позволить инструменту сортировать ваш список как нежелательный побочный эффект.
Какой метод использовать
Выбирайте Excel, когда данные уже находятся в чистой электронной таблице. Выберите командную строку, если дедупликация является одним из этапов автоматизированного сценария. Используйте инструмент браузера, когда перед вами есть список и вы хотите, чтобы он был дедуплицирован за считанные секунды с сохранением порядка и обнаружением почти дубликатов, что для большинства людей в большинстве случаев является именно той ситуацией.