Фильтрация дубликатов в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать в лабораторную работу по фильтрации дубликатов в Linux. В этой лабораторной работе вы научитесь использовать команду uniq в Linux, которая является важным инструментом для фильтрации дублирующихся данных в текстовых файлах. Эта команда особенно полезна при работе с лог-файлами, задачами обработки данных и манипуляцией текстом.

Цель этой лабораторной работы - научить вас эффективно определять и удалять дублирующиеся строки из файлов. Вы узнаете, как использовать команду uniq самостоятельно и как сочетать ее с другими командами, такими как sort, чтобы достичь более мощных возможностей фильтрации. Эти навыки являются фундаментальными для системных администраторов, аналитиков данных и всех, кто нуждается в обработке текстовых данных в Linux-окружениях.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/echo -.-> lab-271417{{"Фильтрация дубликатов в Linux"}} linux/cat -.-> lab-271417{{"Фильтрация дубликатов в Linux"}} linux/cut -.-> lab-271417{{"Фильтрация дубликатов в Linux"}} linux/sort -.-> lab-271417{{"Фильтрация дубликатов в Linux"}} linux/uniq -.-> lab-271417{{"Фильтрация дубликатов в Linux"}} end

Понимание команды uniq

На этом этапе вы узнаете основы команды uniq, которая используется для фильтрации дублирующихся строк в текстовых файлах. Команда uniq особенно важна при работе с логами, конфигурационными файлами и другими данными, где необходимо определить или удалить дубликаты.

Начнем с создания примерного текстового файла для работы. Создадим файл с именем duel_log.txt в директории ~/project:

echo -e "sword\nsword\nshield\npotion\npotion\nshield" > ~/project/duel_log.txt

Эта команда создает файл со следующим содержимым:

sword
sword
shield
potion
potion
shield

Обратите внимание, что в этом файле есть дублирующиеся строки: "sword" встречается дважды, "potion" встречается дважды, и "shield" встречается дважды (но не последовательно).

Теперь используем команду uniq для фильтрации соседних дублирующихся строк:

uniq ~/project/duel_log.txt

Вы должны увидеть следующий вывод:

sword
shield
potion
shield

Обратите внимание на интересную особенность: Команда uniq удалила вторую строку "sword" и вторую строку "potion", так как они были соседними дубликатами. Однако "shield" по-прежнему встречается дважды, потому что его дубликаты не были соседними друг с другом.

Это важное понятие, которое необходимо понять: Команда uniq удаляет только дублирующиеся строки, которые находятся рядом друг с другом (последовательные дубликаты). Если та же самая строка встречается в другом месте файла, но не рядом с ее дубликатом, команда uniq не отфильтрует ее.

Для подтверждения этого поведения проверим исходный файл еще раз:

cat ~/project/duel_log.txt

Сравните это с выводом команды uniq, и вы четко увидите, что были удалены только соседние дубликаты.

Комбинирование команд sort и uniq для полного удаления дубликатов

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

Команда sort упорядочивает строки в алфавитном или числовом порядке, что позволяет собрать все дублирующиеся строки вместе. После сортировки все дублирующиеся строки становятся соседними, что позволяет команде uniq эффективно удалить все дубликаты.

Начнем с создания нового файла для хранения результатов:

touch ~/project/sorted_duel_log.txt

Теперь используем команду sort для упорядочивания строк в исходном файле в алфавитном порядке:

sort ~/project/duel_log.txt

Вы должны увидеть следующий вывод:

potion
potion
shield
shield
sword
sword

Обратите внимание, как команда sort сгруппировала все дублирующиеся строки вместе. Теперь передадим этот отсортированный вывод в команду uniq для удаления дубликатов:

sort ~/project/duel_log.txt | uniq

Вывод должен быть таким:

potion
shield
sword

Отлично! Теперь у нас есть список с удаленными всеми дубликатами. Сохраним этот вывод в файл sorted_duel_log.txt:

sort ~/project/duel_log.txt | uniq > ~/project/sorted_duel_log.txt

Проверим содержимое нашего нового файла:

cat ~/project/sorted_duel_log.txt

Вы должны увидеть:

potion
shield
sword

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

Продвинутые параметры команды uniq и практические применения

Теперь, когда вы понимаете базовое использование команды uniq и способ комбинирования ее с командой sort, давайте рассмотрим некоторые дополнительные параметры команды uniq, которые делают ее еще более мощной для задач обработки данных.

Подсчет количества вхождений с помощью параметра -c

Параметр -c подсчитывает количество вхождений каждой строки. Это полезно, когда вам нужно узнать, сколько раз каждая уникальная строка встречается в файле:

sort ~/project/duel_log.txt | uniq -c

Вы должны увидеть такой вывод:

      2 potion
      2 shield
      2 sword

Это показывает, что каждый элемент встречается дважды в нашем исходном файле.

Поиск только дублирующихся строк с помощью параметра -d

Если вам нужно найти только дублирующиеся строки (строки, которые встречаются более одного раза), вы можете использовать параметр -d:

sort ~/project/duel_log.txt | uniq -d

Вывод:

potion
shield
sword

Поскольку все элементы в нашем файле имеют дубликаты, все они отображаются в выводе.

Создание файла только с уникальными записями

Создадим новый файл с более разнообразным содержимым, чтобы лучше продемонстрировать команду uniq:

echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt

Проверим содержимое этого файла:

cat ~/project/fruits.txt

Вывод:

apple
apple
apple
banana
cherry
cherry
grape

Теперь используем параметр -u для поиска записей, которые встречаются ровно один раз:

sort ~/project/fruits.txt | uniq -u

Вывод:

banana
grape

Это показывает, что "banana" и "grape" встречаются только один раз в нашем файле.

Практическое применение: анализ логов

Создадим простой файл логов, чтобы имитировать реальное применение:

echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log

Теперь проанализируем этот файл логов, чтобы узнать, какие типы сообщений встречаются и сколько раз:

cat ~/project/system.log | sort | uniq -c

Вывод должен быть похожим на следующий:

      2 ERROR: Connection failed
      2 INFO: System started
      1 INFO: User logged in
      1 WARNING: Low memory

Это дает вам быстрый обзор типов событий в файле логов и их частоты.

Вы также можете извлечь только типы сообщений (INFO, ERROR, WARNING) с помощью команды cut:

cat ~/project/system.log | cut -d: -f1 | sort | uniq -c

Вывод:

      2 ERROR
      3 INFO
      1 WARNING

Этот анализ показывает, что из 6 записей в логе 3 являются сообщениями INFO, 2 - сообщениями ERROR и 1 - сообщением WARNING.

Эти примеры демонстрируют, как комбинирование простых команд, таких как sort, uniq и cut, позволяет создавать мощные конвейеры обработки данных в Linux.

Резюме

В этом практическом занятии вы узнали, как использовать команду uniq в Linux для фильтрации дублирующихся строк в текстовых файлах. Вот основные концепции и навыки, которые вы освоили:

  1. Базовое использование команды uniq: Вы узнали, что команда uniq удаляет соседние дублирующиеся строки из файла. Это полезно для базовой фильтрации дубликатов, но имеет ограничения.

  2. Комбинирование команд sort и uniq: Вы обнаружили, что для удаления всех дубликатов, независимо от их положения в файле, сначала нужно отсортировать файл с помощью команды sort, а затем отфильтровать его с помощью команды uniq.

  3. Продвинутые параметры команды uniq:

    • Параметр -c для подсчета количества вхождений каждой строки
    • Параметр -d для отображения только дублирующихся строк
    • Параметр -u для отображения только уникальных строк (строк, которые встречаются ровно один раз)
  4. Практические применения: Вы увидели, как эти команды могут быть применены в реальных сценариях, таких как:

    • Анализ файлов логов
    • Поиск и подсчет уникальных записей
    • Очистка и подготовка данных

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