Команда Linux uniq: фильтрация дубликатов

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

Введение

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

Изучение исходных данных о клиентах

Начнем с изучения необработанных данных о покупках. Эти данные представляют собой ежедневные транзакции, совершенные клиентами.

Для начала перейдем в каталог проекта. В Linux для смены директории используется команда cd. Символ тильды (~) — это сокращение, обозначающее ваш домашний каталог.

cd ~/project

Эта команда меняет текущий рабочий каталог на /home/labex/project. Теперь, когда мы находимся в нужной папке, давайте просмотрим содержимое файла с данными о клиентах. Мы воспользуемся командой cat (сокращение от "concatenate"). Она часто используется для вывода содержимого файлов на экран.

cat customer_purchases.txt

Вы должны увидеть вывод, похожий на этот:

Alice,Electronics
Bob,Books
Charlie,Clothing
Alice,Electronics
David,Home Goods
Bob,Books
Eve,Toys
Charlie,Clothing
Frank,Sports
Alice,Electronics

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

Сортировка данных

Прежде чем эффективно использовать команду uniq, нам необходимо отсортировать данные. Дело в том, что uniq обрабатывает только идущие подряд (соседние) дубликаты, поэтому сортировка гарантирует, что все идентичные записи окажутся рядом друг с другом.

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

sort customer_purchases.txt > sorted_purchases.txt

Разберем эту команду:

  • sort — команда для сортировки строк текста.
  • customer_purchases.txt — входной файл, который мы сортируем.
  • > — оператор перенаправления. Он берет результат работы команды слева и записывает его в файл справа.
  • sorted_purchases.txt — новый файл, в который мы сохраняем отсортированные данные.

Теперь просмотрим содержимое отсортированного файла:

cat sorted_purchases.txt

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

Alice,Electronics
Alice,Electronics
Alice,Electronics
Bob,Books
Bob,Books
Charlie,Clothing
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

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

Использование uniq для удаления дубликатов

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

Выполните следующую команду:

uniq sorted_purchases.txt unique_purchases.txt

Разберем эту команду:

  • uniq — команда для фильтрации повторяющихся строк в файле.
  • sorted_purchases.txt — наш входной файл (отсортированные данные).
  • unique_purchases.txt — выходной файл, в который сохраняются результаты.

Команда uniq считывает данные из sorted_purchases.txt, удаляет идущие подряд дубликаты и сохраняет результат в новом файле unique_purchases.txt.

Теперь проверим содержимое нового файла:

cat unique_purchases.txt

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

Alice,Electronics
Bob,Books
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

Теперь у нас есть список уникальных покупок, где каждый клиент (с конкретной категорией товара) упоминается только один раз. Это дает четкое представление о разнообразии совершенных покупок без лишних повторов.

Подсчет покупок с помощью uniq -c

Команда uniq становится еще полезнее, если использовать ее дополнительные опции. Применим флаг -c, чтобы подсчитать, сколько раз каждый клиент совершал покупку.

Выполните следующую команду:

uniq -c sorted_purchases.txt purchase_counts.txt

Разберем эту команду:

  • uniq — команда фильтрации строк.
  • -c — опция (count), которая указывает uniq добавлять перед каждой строкой количество ее вхождений.
  • sorted_purchases.txt — входной файл.
  • purchase_counts.txt — выходной файл с результатами.

Эта команда подсчитывает количество повторений каждой уникальной строки и сохраняет результат в purchase_counts.txt.

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

cat purchase_counts.txt

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

   3 Alice,Electronics
   2 Bob,Books
   2 Charlie,Clothing
   1 David,Home Goods
   1 Eve,Toys
   1 Frank,Sports

Число в начале каждой строки показывает, сколько раз была совершена данная покупка. Например, Элис (Alice) совершила 3 покупки в категории Electronics, в то время как Фрэнк (Frank) купил товары категории Sports только 1 раз.

Поиск постоянных клиентов с помощью uniq -d

Как аналитику, вам может быть интересно выявить постоянных клиентов. Мы можем использовать опцию -d команды uniq, чтобы вывести только те строки, которые дублируются. Это покажет нам клиентов, совершивших более одной покупки.

Выполните следующую команду:

uniq -d sorted_purchases.txt repeat_customers.txt

Разберем эту команду:

  • uniq — команда фильтрации строк.
  • -d — опция (repeated), которая велит uniq выводить только повторяющиеся строки.
  • sorted_purchases.txt — входной файл.
  • repeat_customers.txt — выходной файл для результатов.

Эта команда находит дубликаты в sorted_purchases.txt и сохраняет их в repeat_customers.txt.

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

cat repeat_customers.txt

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

Alice,Electronics
Bob,Books
Charlie,Clothing

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

Резюме

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

  1. Подготавливать данные для работы с uniq путем предварительной сортировки.
  2. Использовать uniq для удаления дубликатов из отсортированного файла.
  3. Использовать uniq -c для подсчета количества вхождений каждой уникальной строки.
  4. Использовать uniq -d для выявления только повторяющихся строк.

Эти навыки незаменимы при анализе данных, помогая вам эффективно обрабатывать и извлекать полезную информацию из больших наборов текстовых данных.

Дополнительные опции команды uniq, не затронутые в этой работе:

  • -u: Выводить только уникальные строки (те, что встречаются ровно один раз).
  • -i: Игнорировать регистр при сравнении строк.
  • -f N: Пропускать первые N полей при сравнении.
  • -s N: Пропускать первые N символов при сравнении.