Bash Scripting

Эффективное удаление дублирующих строк в Bash

Spread the love

Удаление повторяющихся строк из текстового файла — распространенная задача в скриптах Bash. В этой статье рассматриваются два эффективных метода: использование sort и uniq, а также использование возможностей awk.

Оглавление

Использование sort и uniq

Этот подход объединяет две основные утилиты Unix для простого решения. sort упорядочивает строки в алфавитном порядке, что является необходимым условием для uniq, который затем удаляет повторяющиеся строки, идущие подряд. Порядок *первого* вхождения каждой строки сохраняется.

Вот команда:


sort file.txt | uniq > file_unique.txt

Эта команда передает отсортированный вывод file.txt в uniq, сохраняя уникальные строки в file_unique.txt. Исходный файл остается неизменным.

Пример:

Если file.txt содержит:


apple
banana
apple
orange
banana
grape

file_unique.txt будет содержать:


apple
banana
grape
orange

Использование команды awk

awk предлагает более гибкое и мощное решение, особенно полезное, когда важно сохранить исходный порядок строк. Он использует ассоциативный массив для отслеживания встреченных строк.

Команда удивительно кратка:


awk '!seen[$0]++' file.txt > file_unique.txt

Разберем подробнее:

  • $0 представляет всю текущую строку.
  • seen[$0] обращается к элементу в массиве seen, используя строку в качестве ключа.
  • ++ выполняет пост-инкремент значения (начальное значение 0).
  • ! инвертирует результат; строка выводится только если она встречена впервые (когда seen[$0] равно 0).

Этот метод сохраняет исходный порядок строк.

Пример:

Используя тот же file.txt, вывод в file_unique.txt будет:


apple
banana
orange
grape

Заключение:

Оба метода эффективно удаляют повторяющиеся строки. sort | uniq проще для базовых сценариев, в то время как awk обеспечивает большую гибкость и контроль, особенно для сохранения исходного порядка или обработки более сложных задач по удалению дубликатов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *