команда uniq в linux
HuMan: uniq
Команда uniq без опций
как в стихах другого великого пролетарского поэта Маяковского:
Но довольно поэзии; вернемся к нашему числовому примеру:
Тут нужно уточнить очень интересную вещь: команда uniq сравнивает только рядом расположенные строчки, и если составить столбик цифр в другом порядке, скажем:
то никакого уменьшения числа повторов не произойдет. Становится понятным, что команда uniq любит уже отсортированные тексты, где все одинаковые строчки собраны вместе. Такой сортировкой славится команда sort, вот и добавим ее в наш программный канал:
Получается, что команда uniq как бы и не нужна.
Не спешите с выводами, у команды uniq есть еще несколько опций, которых нет у команды sort.
Сообщит, сколько было одинаковых строк до их урезания:
Эта опция, наоборот, выведет лишь ту строку, которая повторялась в тексте:
Можно узнать и сколько раз эта строка повторялась:
Выведет все повторяющиеся строки, не уменьшая их числа:
На первый взгляд, это не слишком полезно, но в сочетании с некоторыми другими опциями вполне имеет смысл.
Выводит только уникальные строки:
Эта опция пропустит указанное ЧИСЛО «слов», прежде чем начать искать повторы. Тут следует пояснить, что «словом» команда uniq считает любую непрерывную последовательность символов, отделенную от других символов знаками пробела, либо табуляции (таковых знаков может быть один или больше).
В этом примере мы пропустили заведомо одинаковую фамилию, чтобы «отцедить» двойников Иванов. (Правда, безо всяких опций сработало бы не хуже, но в каких-то случаях, скорее всего, эта опция полезна).
Можно скомбинировать эту опцию с другими, слегка изменив синтаксис:
В таком виде она имеет определенный смысл.
Эта опция пропустит необходимое ЧИСЛО символов, прежде начала поиска повторов.
Позволяет сравнивать на уникальность указанное ЧИСЛО символов в каждой строке:
Работает эта опция и в сочетании с опциями пропуска слов или символов:
Остается добавить, что команда uniq принимает в качестве аргументов не только файлы, которые проверяются на уникальность, но и файлы, куда результат проверки будет записан:
Использование команды uniq в Linux (10 примеров)
Оригинал: Linux Uniq Command Tutorial for Beginners (10 examples)
Автор: Himanshu Arora
Дата публикации: 23 мая 2017 г.
Перевод: А.Панин
Дата перевода: 24 мая 2017 г.
В данной статье мы будем обсуждать методику использования утилиты uniq на основе простых для понимания примеров. Но перед тем, как приступить к рассмотрению примеров стоит упомянуть о том, что все примеры и инструкции из данной статьи были протестированы в системе Ubuntu 16.04 LTS.
Утилита uniq в Linux
Как уже говорилось ранее, утилита uniq осуществляет вывод или удаление из вывода повторяющихся строк. А это синтаксис соответствующей команды:
А это описание функций утилиты с ее страницы руководства: «Утилита осуществляет фильтрацию идентичных строк из ВХОДНОГО ФАЙЛА (или из стандартного потока ввода) и выводит информацию в ВЫХОДНОЙ ФАЙЛ (или стандартный поток вывода). При вызове без параметров идентичные строки объединяются в рамках первых найденных экземпляров строк.»
Ниже приведен ряд примеров, которые помогут вам лучше понять принцип работы рассматриваемой утилиты.
1. Удаление повторяющихся строк из вывода
Предположим, что в нашем распоряжении имеется файл со следующими строками:
Несложно заметить, что каждая из строк повторяется. Теперь применим утилиту uniq по отношению к этому файлу и посмотрим, к чему это приведет.
Очевидно, что вывод не содержит дубликатов строк. Обратите внимание на то, что содержимое оригинального файла с именем file1 в нашем случае осталось неизменным. Вы можете перенаправить вывод утилиты в другой файл в том случае, если вам нужно сохранить вывод для дальнейшей обработки.
2. Вывод информации о количестве дубликатов каждой из строк
будет генерировать следующий вывод:
Несложно заметить, что перед каждой из строк выводится число, соответствующее количеству ее повторений.
3. Вывод лишь повторяющихся строк
Теперь при исполнении команды
будет генерироваться следующий вывод:
Очевидно, что в выводе приводится лишь по одному экземпляру строки из каждой группы.
4. Пропуск начальных фрагментов строк
Иногда, в зависимости от ситуации, совпадение двух строк может быть установлено по совпадению определенных частей этих строк. Например, рассмотрим следующий файл:
Из вывода очевидно, что утилита uniq посчитала первую и третью строку повторяющимися исключительно на основе их вторых полей.
5. Вывод всех строк с разделением групп повторяющихся строк
Это пример использования рассматриваемого параметра:
6. Вывод лишь не повторяющихся строк
В нашем случае команда будет выглядеть следующим образом:
Это пример ее использования:
7. Пропуск заданного количества символов в начале строк
Например, предположим, что наш файл содержит следующие строки:
Теперь, если вы захотите, чтобы uniq пропустила первые 4 символа каждой строки перед их сравнением, вы сможете воспользоваться следующей командой:
А это приведенная выше команда в действии:
Несложно заметить, что четвертая строка (faq_forge) из оригинального файла была пропущена. Это объясняется тем, что после пропуска первых четырех символов третья и четвертая строки становятся идентичными для утилиты uniq и она выводит лишь первую из них.
8. Указание количества символов для сравнения
Например, предположим, что файл содержит следующие строки:
Теперь при необходимости ограничения диапазона символов строк для сравнения тремя первыми символами, может использоваться следующая команда:
Это приведенная выше команда в действии:
Так как первые три символа третьей и четвертой строк совпадают, эти строки считаются утилитой идентичными. По этой причине в выводе находится лишь третья строка.
9. Сравнение строк без учета регистра
Например, предположим, что мы будем использовать файл с содержимым, аналогичным рассмотренному в предыдущем разделе, но теперь четвертая строка будет начинаться с символов H, O и W в верхнем регистре.
Теперь, если вы попытаетесь выполнить рассмотренную в предыдущем разделе команду, вы получите отличный вывод:
10. Использование завершающего нулевого символа вместо символа перехода на новую строку
Заключение
Способы использования команды Uniq в Linux с примерами
Если вы пользователь Linux, и ваша работа связана с работой с текстовыми файлами и строками и их использованием, то вы должны быть уже знакомы с командой uniq, поскольку она наиболее часто используется в этой области.
Для тех, кто не знаком с командой uniq, это инструмент командной строки, который используется для сообщения или опускания повторяющихся строк.
Он в основном фильтрует соседние совпадающие строки от INPUT (или стандартного ввода) и записывается в OUTPUT (или стандартный вывод).
Без параметров соответствующие линии объединяются.
Ниже приведено несколько примеров использования команды uniq.
1) Опустить дубликаты
Выполнение команд uniq без указания каких-либо параметров просто пропускает дубликаты и отображает уникальный вывод строки.
2) Отображение числа повторяющихся строк
3) Вывод только дубликатов
4) Игнорировать регистр
Обычно, когда вы используете команду uniq, учитывается регистр.
5) Вывести только уникальные строки
6) Сортировка и поиск дубликатов
Иногда дубликаты записей могут содержаться в разных местах файлов.
В этом случае, если мы просто используем команду uniq, она не будет обнаруживать эти повторяющиеся записи в разных строках.
В этом случае нам сначала нужно отсортировать файл, а затем найти дубликаты
7) Сохранить вывод в другом файле
Вывод нашей команды uniq можно просто сохранить в другом файле, как показано ниже.
8) Игнорировать буквы
Команда uniq Linux
Команда uniq предназначена для поиска одинаковых строк в массивах текста. При этом с найденными совпадениями пользователь может совершать множество действий — например, удалять их из вывода либо наоборот, выводить только их.
Работа команды осуществляется как с текстовыми файлами (в том числе, записями скриптов), так и с текстом, напечатанным в командной строке терминала.
Синтаксис uniq
Запись команды осуществляется следующим образом:
$ uniq опции файл_источник файл_для_записи
Эта управляющая последовательность нужна, чтобы указать утилите, что каждое слово выводится в новой строке. Если указано только название файла источника, результат выполнения команды появится прямо в окне терминала. А при наличии выходного файла текст будет напечатан в теле документа.
Опции uniq
У команды uniq есть такие основные опции:
Вместе с основными опциями могут применяться дополнительные. Они нужны для более тонких настроек работы команды:
Примеры использования uniq
Прежде всего следует отметить главную особенность команды uniq — она сравнивает только строки, которые находятся рядом. То есть, если две строки, состоящие из одинакового набора символов, идут подряд, то они будут обнаружены, а если между ними расположена строка с отличающимся набором символов — то не будут поэтому перед сравнением желательно отсортировать строки с помощью sort. Без задействования файлов uniq работает так:
После команды uniq можно использовать её опции. Вот пример вывода, где не просто удалены повторы, но и указано количество одинаковых строк:
Теперь применим команду к тексту, который находится в файле.
Как можно заметить, глядя на снимок экрана, команда вывела в качестве повторяющихся только вторую и третью группу строк.
Причина этого — незаметный глазу символ пробела, который стоит в конце одной из строк первой группы. Нужно быть предельно внимательным при использовании uniq, чтобы получить качественный результат.
Используемая опция —all-repeated=prepend выполнила свою работу — добавила пустые строки в начало, в конец и между группами строк. Теперь попробуем сравнить только первые 5 символов в каждой строке.
Тогда как append не добавило пустую строку перед текстом:
Выводы
Команда uniq linux пригодится тем, кто часто и много работает с массивами текста, не имея возможности вычитывать их самостоятельно. Следует заметить, что не все версии uniq работают исправно, поэтому иногда результат выдачи может отличаться от ожидаемого.
Свои вопросы относительно использования команды, а также замечания и пожелания оставляйте в комментариях.
Команда uniq в linux
uniq — утилита Unix, с помощью которой можно вывести или отфильтровать повторяющиеся строки в файле. Если входной файл задан как («-») или не задан вовсе, чтение производится из стандартного ввода. Если выходной файл не задан, запись производится в стандартный вывод. Вторая и последующие копии повторяющихся соседних строк не записываются. Повторяющиеся входные строки не распознаются, если они не следуют строго друг за другом, поэтому может потребоваться предварительная сортировка файлов.
Использование
Опции программы имеют следующие значения:
-u Выводить только те строки, которые не повторяются на входе.
-d Выводить только те строки, которые повторяются на входе.
-c Перед каждой строкой выводить число повторений этой строки на входе и один пробел.
-i Сравнивать строки без учёта регистра.
Игнорировать при сравнении первые число_полей полей каждой строки ввода. Полем является строка непробельных символов, отделённая от соседних полей пробельными символами. Поля нумеруются начиная с единицы.
Команда uniq без опций
Если в тексте следует подряд несколько одинаковых строк, то команда uniq уменьшит их количество до одной.
как в стихах другого великого пролетарского поэта Маяковского:
Но довольно поэзии; вернемся к нашему числовому примеру:
Тут нужно уточнить очень интересную вещь: команда uniq сравнивает только рядом расположенные строчки, и если составить столбик цифр в другом порядке, скажем:
то никакого уменьшения числа повторов не произойдет. Становится понятным, что команда uniq любит уже отсортированные тексты, где все одинаковые строчки собраны вместе. Такой сортировкой славится команда sort, вот и добавим ее в наш программный канал:
Получается, что команда uniq как бы и не нужна.
Не спешите с выводами, у команды uniq есть еще несколько опций, которых нет у команды sort.
Параметры uniq
Сообщит, сколько было одинаковых строк до их урезания:
Эта опция, наоборот, выведет лишь ту строку, которая повторялась в тексте:
Можно узнать и сколько раз эта строка повторялась:
Выведет все повторяющиеся строки, не уменьшая их числа:
На первый взгляд, это не слишком полезно, но в сочетании с некоторыми другими опциями вполне имеет смысл.
Выводит только уникальные строки:
Эта опция пропустит указанное ЧИСЛО «слов», прежде чем начать искать повторы. Тут следует пояснить, что «словом» команда uniq считает любую непрерывную последовательность символов, отделенную от других символов знаками пробела, либо табуляции (таковых знаков может быть один или больше).
В этом примере мы пропустили заведомо одинаковую фамилию, чтобы «отцедить» двойников Иванов. (Правда, безо всяких опций сработало бы не хуже, но в каких-то случаях, скорее всего, эта опция полезна).
Можно скомбинировать эту опцию с другими, слегка изменив синтаксис:
В таком виде она имеет определенный смысл.
Эта опция пропустит необходимое ЧИСЛО символов, прежде начала поиска повторов.
Можно также ставить просто: uniq +3.
Позволяет сравнивать на уникальность указанное ЧИСЛО символов в каждой строке:
Работает эта опция и в сочетании с опциями пропуска слов или символов:
Остается добавить, что команда uniq принимает в качестве аргументов не только файлы, которые проверяются на уникальность, но и файлы, куда результат проверки будет записан:
Команда uniq и символы кириллицы
Новые версии программы с русскими буквами работают адекватно (версия 5.97 с некоторыми опциями неадекватно обращалась с кириллицей; версия 6.4 никаких нареканий не вызывает).