Как удалить в текстовом файле одинаковые строки
В своей повседневной деятельности очень часто сталкиваюсь с необходимостью быстро удалить дубли из каких-либо списков. Особенно актуальна данная процедура при работе с огромными массивами данных. Кто сталкивался с подобным, знает, что при работе со списками на несколько сот мегабайт, а то и несколько гигабайт, на первый план выходит быстродействие, ибо даже открыть такой файл на среднестатистическом компьютере (ноутбуке) бывает весьма проблематично. А посему сразу отпадают всевозможные и многочисленные онлайн сервисы, т.к. при их использовании накладываются огромные ограничения как каналом связи, так и возможностями браузера. При этом последний превращается в прожорливого до памяти монстра! Но как вы уже поняли из заголовка, выход есть и даже не единственный. Итак, поехали.
1. Удаление дублей при помощи Excel
Для того, чтобы воспользоваться данным способом, проделайте следующий ряд манипуляций:
- Перейдите по вкладку «Данные».
- Нажмите «Удалить дубликаты».
- На запрос выбора столбцов для удаления убедитесь, что выделены все. Если это не так, то нажмите «Выделите все»
- Нажмите «ОК».
Теперь осталось лишь дождаться процесса завершения работы программы и сохранить полученный результат.
Вывод: данный способ прост до безумия, однако величина списка ограничена максимальным количеством строк на листе редактора — 1 048 576 (версии 2007, 2010, 2013). Что касается скорости работы, то она очень даже высокая. Если ваш список укладывается в данный объём, то смело используйте его. Но что делать, если список больше?
2. Удаление дублей при помощи бесплатной программы Text Duplicate Killer
Дождитесь завершения работы программы и наслаждайтесь результатом.
Вывод: способ очень хорош тем, что не имеет ограничений по объёму списка, весьма стабилен, не требователен к памяти, а также тем, что позволяет работать с файлами без их предварительного открытия, что избавляет от дополнительного ожидания в самом начале в отличии от первого способа с Excel. Однако по причине того, что программа разбивает список на множество мелких подсписков, работает она со средней скоростью, которую иногда хотелось бы подувеличить 🙂
3. Удаление дублей при помощи бесплатной программы Notepad++
Чтобы воспользоваться данным способом, необходимо скачать редактор с официального сайта. Кстати, после установки выкиньте блокнот и переходите на эту программулину. Затем необходимо сделать следующее (подготовительный этап):
- Откройте меню «Плагины».
- Перейдите в подменю «Plugin Manager».
- Выберите пункт «Show Plugin Manager».
- В первой вкладке под названием «Avaliable» найдите и отметьте плагин под названием «TextFX Characters».
- Нажмите на кнопку «Install».
После завершения установки необходимо обязательно перезапустить программу. После этого в верхнем меню у вас отобразится новый пункт «TextFX» — это и есть тот инструмент, которым мы будем наводить марафет внутри нашего списка.
Теперь дело осталось за малым. Выделяем необходимый кусок текста, а т.к. речь идёт о списке целиком, то жмем заветную комбинацию Ctrl+A и выполняем следующую последовательность действий:
- Идем в меню «TextFX».
- Идём в подменю «TextFX Tools».
- Обязательно смотрим, чтобы была активна галка «+Sort outputs only UNIQUE (at column) lines».
- Жмем «Sort lines case sensitive (at column)».
Вот и все. Ждем окончания процесса.
Вывод: несмотря на долгий с первого взгляда ритуал подготовки к удалению, данный способ прежде всего хорош тем, что делает свою работу неимоверно быстро. Алгоритм работы программы устроен таким образом, что даже открытие файлов по несколько сот мегабайт не занимает много времени. Так, например, удаление дублей из списка объёмом 707 мегабайт у меня заняло всего лишь порядка 40 секунд (CPU i5 2.4; 4GB RAM). Это несомненный лидер из данного списка по скорости работы.
В заключении хочется отметить, что наверняка это не все варианты удаления дубликатов, однако, предложенной тройки мне в своей деятельности хватает с головой. Надеюсь и вам они составят добрую службу. А, если вы знаете способы ещё круче, велком в комментарии, обсудим.
Я думаю, что ни для кого не секрет, что любую задачу можно решить несколькими способами, каждый из которых эффективнее в своем отдельно взятом случае.
Мы с вами уже не первый раз сталкиваемся с программой Notepad++ (в одной из статей мы рассмотрели вариант удаления текста до и после определенного символа), а сегодня рассмотрим еще один вариант постановки задачи – удаление нужного количества первых/последних символов каждой строки.
1. Для начала откройте в программе файл, содержащий в себе необходимые данные для обработки.
2. Далее нажмите комбинацию клавиш CTRL+F на клавиатуре, переключитесь на вкладку «Заменить»
и выполните последние шаги в зависимости от поставленных целей.
Как удалить первые N символов каждой строки в Notepad++?
Для того чтобы удалить первые N символов, в разделе «Режим поиска» отмечаем пункт «Регуляр. выражения», а в поле «Найти» вставляем:
«2» здесь – это количество необходимых символов, которое необходимо удалить.
Нижнее же поле «Заменить на» заполняете:
и жмете «Заменить все».
Как удалить последние N символов каждой строки в Notepad++?
Для удаления последних N символов вам необходимо проделать все в точности так, как и в предыдущем варианте, меняется лишь следующее.
В поле «Найти» вы вставляете:
и жмете на «Заменить все».
«2» здесь – это все тоже количество необходимых символов, которое необходимо удалить.
Все описанные варианты отлично подойдут для обработки больших данных. Но есть еще один способ, который также позволяет удалить нужное количество символов с каждой из сторон.
Суть в этом способе следующая.
На клавиатуре вы зажимаете клавишу «Alt», после чего просто выделяете нужные участки каждой строки.
На анимации выше видно, что таким способом можно выделить абсолютно любой одинаковый участок одновременно на всех строках вашего файла.
Задача: Есть текстовый список разбитый по строкам. В списке присутствуют некоторые дубли строк. Необходимо удалить дубликаты строк из списка.
Например:
Есть Должно
получитьсястрока1
строка2
строка4
строка3
строка4
строка1
строка5строка1
строка2
строка4
строка3
строка5
Сделать операцию по удалению дублей можно несколькими способами, предварительно вставив список в программу в которой будем работать.
Удалить дубликаты в Microsoft Excel
Выделяем список (столбец) ➤ переходим во вкладку Date (Данные), нажимаем команду Remove Duplicates (Удалить дубликаты) ➤ в открывшемся диалоговом окне «Remove Duplicates» (Удалить дубликаты) снимаем флажок My data has headers (Мои данные содержат заголовки) ➤ нажимаем OK. Все повторяющиеся строки будут удалены, кроме первой (оригинала).
Фильтровать дубликаты в LibreOffice
Обратите внимание, что номера у строк в таблице отображаются прежние.
Google-Таблицы
Google Таблицы не имеют встроенных функций удаления дублей, поэтому можно использовать установить дополнение «Remove Duplicates». Установить это расширение можно бесплатно.
NotePad++
Для удаления ненужных дублей строк в NotePad++ необходимо установить плагин TextFX если не установлен.
Удаление повторяющихся строк: Переходим в документ со списком и выделяем (Ctrl+A) ➤ нажимаем в меню TextFX ➤ TextFX Tools ➤ проверяем отмечена ли функция Sort outputs only UNIQUE lines (Сортировать вывод только по УНИКАЛЬНЫМ строкам), ➤ если да, то сразу выбираем Sort lines case insensitive (Сортировка строк без учета регистра).
Удаление дублей онлайн
Для удаления повторяющихся строк (например, это может быть список ключевых слов из KeyCollector, Excel, NotePad и пр.) можно воспользоваться онлайн инструментом удаления дубликатов «Сервис удаления дублей строк».
Удаление дублей строк вместе с оригиналами
Дубликаты с оригиналом в Microsoft Excel
Данная задача выполняется чуть сложнее чем в случае выше. Суть заключается в том, что нужно выделить дубли строк другим цветом, а потом отсортировать по цвету и удалить одинаковые строки.
- Выделяем диапазон строк (столбец) ➤ Условное форматирование ➤ Правила выделения ячеек ➤ Повторяющиеся значение ➤ в диалоговом окне нажимаем OK.
- Выделяем диапазон строк (или столбец) ➤ Сортировка и фильтр ➤ Фильтр. В первой строке появится квадратик контекстного меню.
- Нажимаем ЛКМ на появившийся квадратик в первой строке ➤ Фильтр по цвету ➤ фильтруем по цвету ячейки.
- В таблице остались только одинаковые строки, выделяем все строки ➤ правой кнопкой мыши вызываем контекстное меню в области над номерами строк ➤ Удалить строку.
Изображение ниже поможет сориентироваться в действиях.
Программа удаления строк-дублей bvsDupDelet
Удалить дубли строк вместе с их оригиналом онлайн можно в том же инструменте этого сайта.
Имеется текстовый файл temp6.txt в котором следующая информация:
Удаление повторений и пустых строк таким образом
Не работает:
7 и 8 строка (см. рисунок) должны удалиться, как я понимаю, но они остаются. То есть, толку от array_unique и array_filter никакого. Точнее, я скорей всего неправильно использую функции.
Благодаря варианту Алексея Шиманского:
удалось избавиться от пустых строк. Но вот строки повторяются! array_unique бесполезная вещь какая-то. =(
Сопутствующий вопрос. А как отсортировать строки в порядке убывания первых 10 символов (чисел, например: 0000000504, 0000000503 и т.д.)? Я думаю, что лучше всю строку не рассматривать, т.к. там числа с текстом вперемешку. Но не пойму, как задать выборку, которая как бы и будет являться флагом.
ВСЕМ СПАСИБО! ВСЁ СДЕЛАЛА
Удаление повторов у вас прекрасно работает. А с последней строчкой «проблема» не в ней, а в символе новой строки в конце предпоследней строки – собственно, каждая строка с данными заканчивается символом новой строки.
Чтобы «пустой строки» не было, надо у последней строки с данным отрезать символ новой строки в конце.
Наиболее близко к исходному коду был бы такой вариант:
В первой строке в массив $data мы получаем уникальные строки без символа конца строки в конце каждой и пробелов по краям если были, что вряд ли.
Во второй выкидываем из массива пустые строки с помощью вспомогательной функции notEmpty() , хотя вряд ли там есть действительно пустые строки.
В третьей записываем в файл результат – соединяем элементы массива символом новой строки. Так после последней строки этого символа не будет.
Читайте также: