uniq (уникальные строки)
100%

Text-Fu · Урок 14

uniq (уникальные строки)

Научитесь сворачивать, подсчитывать и фильтровать соседние группы одинаковых строк с помощью uniq.

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

Свёртывание соседних повторяющихся строк

Предположим, reading.txt содержит сгруппированные значения:

book
book
paper
paper
article
article
magazine

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

$ uniq reading.txt
book
paper
article
magazine

Входной файл не изменяется, поскольку результат поступает в stdout.

Что по умолчанию делает uniq reading.txt?

Подсчёт соседних групп

Используйте -c, чтобы добавить перед каждой выходной группой количество последовательных входных строк:

$ uniq -c reading.txt
      2 book
      2 paper
      2 article
      1 magazine

Это длины последовательностей, а не глобальные количества, если только все одинаковые строки заранее не были сделаны соседними.

Что обозначает число от uniq -c?

Выбор уникальных и повторяющихся групп

Используйте -u, чтобы вывести только группы ровно из одной строки:

$ uniq -u reading.txt
magazine

Используйте -d, чтобы вывести одну строку из каждой соседней группы, содержащей более одной строки:

$ uniq -d reading.txt
book
paper
article

GNU uniq -D выводит все строки повторяющихся групп, тогда как строчная -d — значение каждой такой группы один раз.

Какая команда выводит только соседние группы, встречающиеся ровно один раз?

Какая команда выводит по одной строке для каждой соседней группы, встречающейся более одного раза?

Группировка разделённых дубликатов

Если одинаковые строки разделены, они образуют разные группы:

book
paper
book
paper
article
magazine
article

Запуск uniq для такого файла даст неожиданный результат:

$ uniq reading.txt
book
paper
book
paper
article
magazine
article

Ни одна строка не сворачивается, поскольку соседние значения различаются. Если изменение порядка допустимо и нужно сгруппировать одинаковые полные строки, сначала выполните сортировку:

$ sort reading.txt | uniq
article
book
magazine
paper

Используйте согласованные локаль и правила сравнения на обоих этапах. sort -u reading.txt также может за одну команду отсортировать данные и оставить по одной строке на каждый одинаковый ключ сортировки.

Одинаковые строки разбросаны по reading.txt, а порядок вывода можно изменить. Какой конвейер выдаёт по одной отсортированной копии каждой различающейся полной строки?

uniq читает stdin, если входной файл не указан, поэтому естественно располагается после sort. Параметр GNU -i позволяет игнорировать регистр, а -f, -s и -w — пропускать или ограничивать области сравнения; применяйте их только тогда, когда равенство должно определяться частью строки.

Чтобы попрактиковаться в группировке, подсчёте и фильтрации дубликатов, выполните лабораторные работы:

  1. Команда uniq в Linux: фильтрация дубликатов — научитесь использовать uniq вместе с sort для поиска, фильтрации и анализа повторяющихся строк.
  2. Команда sort в Linux: сортировка текста — попрактикуйтесь упорядочивать строки текстовых файлов перед эффективным применением uniq.
  3. Подсчёт слов и сортировка — примените wc и sort для подсчёта строк, слов и символов, поиска частых закономерностей и сортировки данных.

Урок завершён

Вы завершили uniq (уникальные строки)

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

  • Сворачивайте каждую соседнюю группу дубликатов в одну строку.

  • Считайте последовательные вхождения параметром -c.

  • Выбирайте одиночные группы параметром -u.

  • Выбирайте повторяющиеся группы параметрами -d или GNU -D.

  • Сначала сортируйте данные, если нужно сгруппировать разделённые дубликаты.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Text-Fu