Удаление строк в текстовых данных¶
Удаление строк — операция обработки текстовых и табличных данных, заключающаяся в исключении из массива одной или нескольких строк по заданному условию либо по их позиции. Относится к базовым операциям редактирования текста и преобразования данных и реализуется как в интерактивных редакторах, так и в языках программирования, командных оболочках и системах управления базами данных.
¶Общее понятие
Строкой называют последовательность символов, завершённую символом перевода строки либо ограниченную началом и концом файла. Удаление строки означает, что эта последовательность вместе с завершающим её разделителем исключается из результата, а последующие строки сдвигаются. В табличных данных аналогом строки выступает запись (кортеж), поэтому операция тесно связана с удалением записей.
Различают удаление по позиции (номеру строки), по образцу (регулярному выражению, подстроке), по условию (значению поля, длине, наличию символов) и по дублированию (устранение повторов).
¶В текстовых редакторах
В интерактивных редакторах удаление строк выполняется командами меню или сочетаниями клавиш. Типовые приёмы:
- выделение строки целиком и нажатие клавиши удаления;
- команда «вырезать строку» с помещением её в буфер обмена;
- удаление до конца или до начала строки;
- удаление пустых строк и строк с пробельными символами.
В редакторах с расширениями (например, в редакторах кода) доступны массовые операции: удаление всех строк, содержащих заданный фрагмент, удаление дубликатов, удаление строк по номеру из списка.
¶В командных оболочках и утилитах
В Unix-подобных системах для удаления строк применяются потоковые утилиты. Утилита sed удаляет строки по номеру (sed '5d') или по образцу (sed '/шаблон/d'). Утилита grep с инвертированием (grep -v) выводит все строки, кроме соответствующих образцу, что равносильно их удалению. Утилита awk позволяет удалять строки по условию на значения полей. Команда uniq в сочетании с сортировкой устраняет повторяющиеся строки.
В Windows-средах аналогичные задачи решаются средствами PowerShell (командлеты фильтрации и отбора объектов) и утилитами пакетной обработки.
¶В языках программирования
В языках программирования удаление строк реализуется через работу с массивами строк или со строками как единым блоком.
| Среда | Типовой приём |
|---|---|
| Python | разбиение текста методом splitlines(), фильтрация списка, обратная сборка join() |
| JavaScript | split('\n'), методы массивов filter, splice, затем join('\n') |
| Java | BufferedReader построчно, запись отобранных строк в новый поток |
| C# | File.ReadAllLines, LINQ-фильтрация, File.WriteAllLines |
| SQL | оператор DELETE FROM таблица WHERE условие |
При построчной обработке больших файлов применяют потоковое чтение, чтобы не загружать весь объём в память.
¶В базах данных
В реляционных базах данных удаление строк выполняется оператором DELETE. Он может затрагивать одну запись (по первичному ключу), группу записей (по условию в WHERE) или все записи таблицы. Связанные записи в дочерних таблицах удаляются каскадно, если задано соответствующее ограничение внешнего ключа. Для полной очистки таблицы применяют оператор TRUNCATE, который выполняется быстрее, но не порождает построчных записей в журнале транзакций.
¶В электронных таблицах
В табличных процессорах строка удаляется командой контекстного меню или меню «Лист». При удалении строки ссылки в формулах автоматически корректируются, если они не были закреплены абсолютно. Для массового удаления используют фильтрацию с последующим удалением видимых строк либо встроенные средства обработки данных.
¶Условия и критерии
Критерии удаления строк задаются:
- точным значением или подстрокой;
- регулярным выражением;
- длиной строки (например, удалить строки короче заданного числа символов);
- наличием или отсутствием определённых символов;
- позицией в файле (диапазон номеров);
- повторяемостью (оставить только первое или последнее вхождение).
¶Обратимость и риски
Удаление строк в редакторах с историей действий обратимо отменой. В файловых операциях и базах данных удаление часто необратимо, поэтому применяют предварительное резервное копирование, транзакции и «мягкое» удаление с пометкой вместо физического исключения записи. Ошибочное удаление строк при пакетной обработке — распространённая причина потери данных, что требует проверки условий фильтрации на тестовой выборке.
¶Производительность
При обработке больших массивов эффективнее потоковые методы, не создающие полной копии данных в памяти. Удаление строк в базе данных ускоряется индексами по столбцам условия. Массовое удаление в таблицах замедляется пересчётом формул и зависимостей.
Источники: документация по утилитам GNU Coreutils и sed; справочные руководства по языкам Python, JavaScript, SQL; руководства пользователя текстовых редакторов и табличных процессоров.