Команда Uniq в Linux

Обновлено: 07.07.2024

В Unix-подобных операционных системах команда uniq сообщает или отфильтровывает повторяющиеся строки в файле.

Эта страница посвящена версии uniq для GNU/Linux.

Описание

uniq отфильтровывает соседние совпадающие строки из входного файла INPUT, записывая отфильтрованные данные в выходной файл OUTPUT. Совпадающая строка считается «смежной», если она находится непосредственно перед другой совпадающей строкой или после нее.

Например, рассмотрим файл fruit.txt со следующими строками текста:

Если вы запустите uniq для этих строк текста, каждая строка, совпадающая с соседней строкой, будет пропущена:

Синтаксис

Параметры

-c, --count Начинайте строки с числа, обозначающего, сколько раз они встречаются.
-d, --repeat Выводить только повторяющиеся строки.
-D,
--all -repeat[=delimit-method]
Вывести все повторяющиеся строки. delimit-method может быть одним из следующих:

Эта опция полезна, например, если строки вашего документа пронумерованы, и вы хотите сравнить все в строке, кроме номера строки. Если была указана опция -f 1, то соседние строки

Примечания

Если INPUT не указан, uniq считывается со стандартного ввода.

Если OUTPUT не указан, uniq записывает в стандартный вывод.

Если параметры не указаны, совпадающие строки объединяются с первым вхождением.

uniq не обнаруживает повторяющиеся строки, если они не являются смежными. Если вы хотите опустить ВСЕ вхождения одинаковых строк, сначала отсортируйте ввод или используйте sort -u вместо uniq.

Примеры

В следующих примерах у нас есть текстовый файл myfruit.txt с пятью строками текста:

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

Если соседние строки идентичны, отобразить строку один раз

То же, что и выше, но перед каждой строкой указывается количество повторений

Показывать только дубликаты (соседние одинаковые строки)

Показывать только уникальные строки (без соседних одинаковых строк)

Сортировать строки по алфавиту

Команда sort сортирует строки текста в алфавитном порядке.

Теперь все одинаковые строки являются смежными.

Показать уникальные строки только один раз

Вывод sort может быть передан в uniq. Поскольку ввод отсортирован, все одинаковые строки будут соседними. В результате все одинаковые строки в файле отображаются только один раз.

Того же результата можно добиться, запустив sort -u.

Связанные команды

comm — сравнение двух отсортированных файлов построчно.
pack — сжатие файлов с использованием алгоритма Хаффмана.
pcat — вывод несжатого содержимого сжатого файла.
sort — сортировка строк в текстовом файле.
распаковать — извлечь файлы из сжатых архивов.

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

Синтаксис команды uniq:

Синтаксис этого довольно прост для понимания. Здесь INPUT относится к входному файлу, в котором необходимо отфильтровать повторяющиеся строки, и если INPUT не указан, то uniq читает из стандартного ввода. OUTPUT относится к выходному файлу, в котором вы можете сохранить отфильтрованный вывод, созданный командой uniq, и, как и в случае INPUT, если OUTPUT не указан, uniq записывает в стандартный вывод.

Теперь давайте разберемся, как это использовать, на примере. Предположим, у вас есть текстовый файл с именем kt.txt, который содержит повторяющиеся строки, которые необходимо опустить. Это можно просто сделать с помощью uniq.

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

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

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

  1. -c – -count : сообщает, сколько раз повторялась строка, отображая число в качестве префикса строки.
  2. -d – -repeat : печатаются только повторяющиеся строки, а не строки, которые не повторяются.
  3. -D – -all-repeat[=METHOD] : печатает все повторяющиеся строки, а METHOD может быть любым из следующих:
    • none : вообще не разделять повторяющиеся строки. Это значение по умолчанию.
    • prepend : вставить пустую строку перед каждым набором повторяющихся строк.
    • разделить: вставить пустую строку между каждым набором повторяющихся строк.
  4. -f N – -skip-fields(N): позволяет пропустить N полей (поле – это группа символов, разделенных пробелами) строки перед определением уникальности строки.
  5. -i – -ignore case : по умолчанию сравнения выполняются с учетом регистра, но с этой опцией можно выполнять сравнения без учета регистра.
  6. -s N – -skip-chars(N) : не сравнивает первые N символов каждой строки при определении уникальности. Это похоже на параметр -f, но пропускает отдельные символы, а не поля.
  7. -u – -unique: позволяет печатать только уникальные строки.
  8. -z – -zero-terminated : строка будет заканчиваться 0 байтами (NULL) вместо новой строки.
  9. -w N – -check-chars(N) : сравнивает только N символов в строке.
  10. – – help : отображает справочное сообщение и завершает работу.
  11. – – version : отображает информацию о версии и завершает работу.

Примеры uniq с опциями

<р>1. Использование параметра -c: сообщает, сколько раз повторялась строка.

<р>3. Использование параметра -D: также печатаются только повторяющиеся строки, но не по одной на группу.

<р>4. Использование параметра -u: печатаются только уникальные строки.

<р>5. Использование опции -f N: как сказано выше, это позволяет пропускать N полей при сравнении уникальности строк. Этот параметр полезен, когда строки пронумерованы, как показано в примере ниже:

<р>6. Использование опции -s N: аналогична опции -f N, но пропускает N символов, но не N полей.

<р>7. Использование параметра -w: аналогично способу пропуска символов, мы также можем попросить uniq ограничить сравнение заданным количеством символов. Для этого используется параметр командной строки -w.

<р>8. Использование параметра -i : используется, чтобы сделать сравнение нечувствительным к регистру.

<р>9. Использование параметра -z: по умолчанию вывод, который производит uniq, завершается новой строкой. Однако, если вы хотите, вместо этого вы хотите, чтобы вывод завершался NULL (полезно при работе с uniq в сценариях). Это можно сделать с помощью параметра командной строки -z.

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

Приблизительное время чтения: 4 минуты

Оглавление

Справочная страница Uniq

Что такое команда uniq в UNIX?

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

Uniq ожидает смежные строки

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

Поскольку дубликаты находятся рядом, uniq вернет уникальные вхождения и отправит результат на стандартный вывод.

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

Передача этого файла в uniq просто вернет содержимое файла. Если файлы еще не отсортированы, можно использовать команду sort для сортировки файла перед передачей в uniq . Статья с описанием использования sort доступна здесь.

Как показать количество появлений строки

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

Как отображать только повторяющиеся строки

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

Как отображать только неповторяющиеся строки

Чтобы отображались только неповторяющиеся строки, передайте параметр -u в uniq . Это выведет только строки, которые не повторяются, и запишет результат в стандартный вывод.

Как игнорировать символы при сравнении

Чтобы игнорировать символы при сравнении, передайте параметр -s в uniq . Это проигнорирует символы, указанные в сравнении, и выведет результат на стандартный вывод.

Предположим, что список авторов находится в файле, сохраненном как author.txt. В файле есть цифры перед именами авторов.

Чтобы вернуть список авторов, номера можно игнорировать, используя параметр -s.Это позволит пропустить количество символов, заданное перед сравнением.

Обратите внимание, что берется первое вхождение, и строка распечатывается как есть. Если вывод необходимо очистить, это можно сделать, подключив его к чему-то вроде sed .

Как игнорировать поля при сравнении

Чтобы игнорировать поля при сравнении, передайте параметр -f в uniq . Это запустит сравнение указанного поля и выведет результат на стандартный вывод.

Предположим, существует файл со списком игроков в крикет и клубов, за которые они играют. Он сохраняется как cricketers.txt .

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

Как и в случае с параметром -s, uniq выводит первое найденное вхождение. Можно комбинировать с параметром -c для вывода количества.

Чтобы просто увидеть список округов, можно использовать sed и cut для очистки.

Дополнительная литература

У вас есть новости или предложения по этой статье? Вы можете отредактировать его здесь и отправить мне запрос на вытягивание.

Последние публикации

Об авторе

Джордж Орнбо живет в Великобритании.

Он увлекается людьми, музыкой, едой и писательством. В предыдущей версии себя он писал книги по технологиям.


Дэйв Маккей


Дэйв Маккей
Писатель

Приглашение оболочки на компьютере с Linux.

Фатмавати Ахмад Заэнури/Shutterstock

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

Поиск совпадающих строк текста в Linux

Команда uniq быстрая, гибкая и отлично справляется со своими задачами. Однако, как и у многих команд Linux, у него есть несколько особенностей, и это нормально, если вы знаете о них. Если вы сделаете решительный шаг без каких-либо инсайдерских ноу-хау, вы вполне можете почесать голову над результатами. Мы укажем на эти особенности по ходу дела.

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

Зажжем!

Запуск uniq без параметров

У нас есть текстовый файл, содержащий текст песни Роберта Джонсона I Believe I’ll Dust My Broom. Посмотрим, что из этого сделает uniq.

Мы введем следующее, чтобы направить вывод в less :


Мы получаем всю песню, включая повторяющиеся строки, в меньшем размере:


Похоже, это не уникальные строки и не повторяющиеся строки.

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

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

Для этого введите следующее:


Отсортированный список строк появляется в less .


Строка "Кажется, я вытряхну пыль из своей метлы" определенно появляется в песне несколько раз. Фактически, оно повторяется дважды в первых четырех строках песни.

Итак, почему он отображается в списке уникальных строк? Поскольку строка, впервые появившаяся в файле, уникальна; дублируются только последующие записи. Вы можете думать об этом как о перечислении первых вхождений каждой уникальной строки.

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

Вводим следующую команду:


Теперь у нас есть предварительно отсортированный файл для работы.

Подсчет дубликатов

Вы можете использовать параметр -c (количество), чтобы напечатать количество раз, которое каждая строка появляется в файле.

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


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


Если вы хотите, чтобы вывод отсортировался в числовом порядке, вы можете передать вывод из uniq в sort . В нашем примере мы будем использовать параметры -r (обратная) и -n (числовая сортировка) и передавать результаты в less .

Вводим следующее:

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


Вывод только повторяющихся строк

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

Чтобы использовать эту опцию, введите следующее:


Повторяющиеся строки перечислены для нас. Вы заметите пустую строку вверху, что означает, что файл содержит повторяющиеся пустые строки — это не место, оставленное uniq для косметического смещения списка.


Мы также можем комбинировать параметры -d (повторяющиеся) и -c (количество) и направлять вывод через sort . Это дает нам отсортированный список строк, которые встречаются как минимум дважды.

Чтобы использовать эту опцию, введите следующее:


Список всех повторяющихся строк

Если вы хотите просмотреть список всех повторяющихся строк, а также запись о каждом появлении строки в файле, вы можете использовать параметр -D (все повторяющиеся строки).

Чтобы использовать эту опцию, введите следующее:


Список содержит запись для каждой повторяющейся строки.


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

Мы используем append в качестве модификатора, поэтому вводим следующее:


Группы разделены пустыми строками, чтобы их было легче читать.


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

По умолчанию uniq проверяет всю длину каждой строки. Однако, если вы хотите ограничить проверки определенным количеством символов, вы можете использовать параметр -w (проверить символы).

В этом примере мы повторим последнюю команду, но ограничим сравнение первыми тремя символами. Для этого набираем следующую команду:

Результаты и группировки, которые мы получаем, сильно различаются.


Все строки, начинающиеся с "I b", группируются вместе, поскольку эти части строк идентичны, поэтому они считаются дубликатами.

Аналогичным образом все строки, начинающиеся с «Я», рассматриваются как дубликаты, даже если остальная часть текста отличается.

Игнорирование определенного количества символов

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

Ниже представлена ​​версия нашего отсортированного файла с пронумерованными строками.


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


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

Вы также можете пропустить поля (ряд символов и немного пробела) вместо символов. Мы будем использовать параметр -f (поля), чтобы сообщить uniq, какие поля игнорировать.

Мы вводим следующее, чтобы заставить uniq игнорировать первое поле:


Мы получили те же результаты, что и когда сказали uniq пропускать три символа в начале каждой строки.

Игнорирование регистра

По умолчанию uniq чувствителен к регистру. Если одна и та же буква отображается с заглавными буквами и в нижнем регистре, uniq считает строки разными.

Например, проверьте вывод следующей команды:


Строки "Верю, я вытру свою метлу" и "Я верю, что вытру свою метлу" не считаются дубликатами из-за разницы в регистре букв "В" в слове "верю".

Однако, если мы включим параметр -i (игнорировать регистр), эти строки будут считаться дубликатами. Мы вводим следующее:


Строки теперь рассматриваются как дубликаты и группируются вместе.

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

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

Или вы всегда можете просто выполнить поиск How-To Geek — возможно, у нас есть статья об этом.

< /tbody>
Команды Linux
Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
  • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
  • › Что означает XD и как вы его используете?
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
  • › Почему прозрачные чехлы для телефонов желтеют?
  • › Как установить Google Play Маркет в Windows 11
  • › Как восстановить метки панели задач в Windows 11

Читайте также: