Linux только уникальные строки

Linux только уникальные строки

йРПМШЪПЧБОЙЕ РТПЗТБННЩ:
uniq [ option ] [ input [ output ]]
рП ХНПМЮБОЙА, РТПЗТБННБ uniq ЮЙФБЕФ ЧЧПДОПК РПФПЛ, ЛПФПТЩК РТЕДРПМПЦЙФЕМШОП СЧМСЕФУС ПФУПТФЙТПЧБООЩН Ч ЛБЛПН-ФП УНЩУМЕ (РП БМЖБЧЙФХ ЙМЙ Ч УППФЧЕФУФЧЙЙ У ЮЙУМПЧЩНЙ ЪОБЮЕОЙСНЙ). еУМЙ ЧУФТЕЮБАФУС ПДЙОБЛПЧЩЕ УФТПЛЙ, ФП РТПЗТБННБ ХДБМСЕФ РПЧФПТЕОЙС, ПУФБЧМСС МЙЫШ РП ПДОПК УФТПЛЕ ЙЪ МАВПЗП ЛПМЙЮЕУФЧБ РПЧФПТСАЭЙИУС УФТПЛ. пДОБЛП ЧПЪНПЦОЩ ЧБТЙБОФЩ (УНПФТЙФЕ ОЙЦЕ ПРЙУБОЙЕ РБТБНЕФТПЧ РТПЗТБННЩ uniq ). ч ДБООПН ТБЪДЕМЕ ПВУХЦДБЕФУС ФПФ ЧБТЙБОФ РТПЗТБННЩ ЛПФПТЩК ПФЧЕЮБЕФ ОБ ЛПНБОДХ
uniq -version
УФТПЛПК
SPMquot uniq (GNU textutils) 1.22″.

чЧПДОПК РПФПЛ ДПМЦЕО ВЩФШ ПФУПТФЙТПЧБО. еУМЙ ОЕ ПРТЕДЕМ©О РБТБНЕФТ output , ФП ЧЩЧПД РТПЙЪЧПДЙФУС ОБ УФОДБТФОПЕ ХУФТПКУФЧП ЧЩЧПДБ. еУМЙ РБТБНЕФТ output , ФП ЧЩЧПД РТПЙЪЧПДЙФУС Ч ЖБКМ У ЙНЕОЕН output .

рТПЗТБННБ ЧПУРТЙОЙНБЕФ УМЕДХАЭЙЕ РБТБНЕФТЩ.

— n -f n — skip-fields= n рТПРХУФЙФШ n РПМЕК Ч ЛБЦДПК УФТПЛЕ ЧЧПДОПЗП ЖБКМБ ДП РТПЧЕТЛЙ ОБ ХОЙЛБМШОПУФШ. рПМЕ ЧЧПДОПК ЪБРЙУЙ СЧМСЕФУС РПУМЕДПЧБФЕМШОПУФШ УЙНЧПМПЧ, ЛПФПТБС ОЕ УПДЕТЦЙФ ЧОХФТЙ УЕВС РТПВЕМПЧ ЙМЙ ЪОБЛПЧ ФБВХМСГЙЙ . пДОП РПМЕ ПФДЕМСЕФУС ПФ ДТХЗПЗП ПДОЙН ЙМЙ ВПМЕЕ ЪОБЛБНЙ РТПВЕМБ ЙМЙ ФБВХМСГЙЙ .

+ n -s n — skip-chars= n рТПРХУФЙФШ n УЙНЧПМПЧ ДП РТПЧЕТЛЙ ОБ ХОЙЛБМШОПУФШ. еУМЙ ЙУРПМШЪХЕФУС РТПРХУЛ УТБЪХ ДЧХИ ЧЕЭЕК: РТПРХУЛ РПМЕК Й РТПРХУЛ УЙНЧПМПЧ, ФП ЧОБЮБМЕ ЧЩРПМОСЕФУС РТПРХУЛ РПМЕК, Б РПФПН РТПРХУЛ УЙНЧПМПЧ.

-c — count чЩЧЕУФЙ ЮЙУМП ТБЪ, ЛПФПТПЕ ЛБЦДБС УФТПЛБ ЧУФТЕФЙМБУШ ЧП ЧЧПДОПН ЖБКМЕ.

-i — ignore-case йЗОПТЙТПЧБФШ ТЕЗЙУФТ, Ч ЛПФПТПН РТЕДУФБЧМЕОЩ УЙНЧПМЩ ЧП ЧИПДОПН ЖБКМЕ.

-d — repeated чЩЧЕУФЙ ФПМШЛП РПЧФПТСАЭЙЕУС УФТПЛЙ.

-u — unique оБРЕЮБФБФШ ФПМШЛП ХОЙЛБМШОЩЕ УФТПЛЙ (ОЕ РПЧФПТСАЭЙЕУС).

-w n — check-chars= n уТБЧОЙЧБФШ ФПМШЛП n УЙНЧПМПЧ Ч ЛБЦДПК УФТПЛЕ (РПУМЕ РТПРХУЛБ РПМЕК Й УЙНЧПМПЧ). рП ХНПМЮБОЙА, РПУМЕ РТПРХУЛБ РПМЕК Й УЙНЧПМПЧ, ЕУМЙ ФБЛПЧЩЕ ЙНЕМЙ НЕУФП, УТБЧОЙЧБЕФУС ПУФБФПЛ УФТПЛЙ ГЕМЙЛПН.

тБУУНПФТЙН ОЕУЛПМШЛП РТПУФЩИ РТЙНЕТПЧ. рХУФШ Х ОБУ ЙНЕЕФУС ФЕУФПЧЩК ЖБКМ У ЙНЕОЕН T , ЛПФПТЩК УПДЕТЦЙФ ОЙЦЕУМЕДХАЭЕЕ:

фПЗДБ ЛПНБОДБ
uniq -c T
ДБУФ
юФП УПЧЕТЫЕООП ОЕХДЙЧЙФЕМШОП, ЧЕДШ ЧИПДОПК ЖБКМ ОЕ ПФУПТФЙТПЧБО. оП ЕУМЙ РТЙНЕОЙФШ ЛПНБОДХ
uniq +3 -w 2 -c T
ФП РПМХЮЙН ТЕЪХМШФБФ Ф.Е. РТПЗТБННБ ОБКД©Ф РПЧФПТСАЭЙЕУС ЮБУФЙ УФТПЛ. нЩ НПЦЕН ЙУРПМШЪПЧБФШ ЛПНБОДХ
uniq -1 -w 2 -c T
Й ХЧЙДЙН, ЮФП РТПЗТБННБ РТПРХУФЙМБ ФПМШЛП РЕТЧПЕ РПМЕ, ОП ОЕ РТПВЕМ РПУМЕ ОЕЗП
SPMquot 6 12311 aabcd»
ОП ЕУМЙ ХЮЕУФШ ЬФП СЧМЕОЙЕ
uniq -1 +1 -w 1 -c T
ФП РПМХЮЙН, ЮФП ПЦЙДБМПУШ

Источник

Использование команды uniq в Linux (10 примеров)

Оригинал: Linux Uniq Command Tutorial for Beginners (10 examples)
Автор: Himanshu Arora
Дата публикации: 23 мая 2017 г.
Перевод: А.Панин
Дата перевода: 24 мая 2017 г.

Читайте также:  Ноутбук не видит wifi после переустановки windows

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

В данной статье мы будем обсуждать методику использования утилиты uniq на основе простых для понимания примеров. Но перед тем, как приступить к рассмотрению примеров стоит упомянуть о том, что все примеры и инструкции из данной статьи были протестированы в системе Ubuntu 16.04 LTS.

Утилита uniq в Linux

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

А это описание функций утилиты с ее страницы руководства: «Утилита осуществляет фильтрацию идентичных строк из ВХОДНОГО ФАЙЛА (или из стандартного потока ввода) и выводит информацию в ВЫХОДНОЙ ФАЙЛ (или стандартный поток вывода). При вызове без параметров идентичные строки объединяются в рамках первых найденных экземпляров строк.»

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

1. Удаление повторяющихся строк из вывода

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

Несложно заметить, что каждая из строк повторяется. Теперь применим утилиту uniq по отношению к этому файлу и посмотрим, к чему это приведет.

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

2. Вывод информации о количестве дубликатов каждой из строк

Если вам нужно, вы можете использовать утилиту uniq для вывода информации о количестве повторений каждой из строк файла. Это может быть сделано с помощью параметра командной строки -c . Например, команда

будет генерировать следующий вывод:

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

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

Для того, чтобы утилита uniq выводила лишь повторяющиеся строки, следует использовать параметр -D командной строки. Например, предположим, что файл с именем файл file1 теперь содержит дополнительную строку в конце (обратите внимание на то, что эта строка не повторяется).

Теперь при исполнении команды

будет генерироваться следующий вывод:

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

Данный параметр требует от пользователя обязательного указания метода добавления разделителя. Строки могут добавляться к разделителю (то есть, пустой строке) с помощью метода prepend или разделяться с помощью него с помощью метода append . Например, в данном случае используется метод prepend .

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

Читайте также:  Bitnami owncloud windows installer

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

4. Пропуск начальных фрагментов строк

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

Теперь предположим, что строки должны считаться совпадающими или не совпадающими на основании совпадения или несовпадения их вторых полей (то есть HTF или FF) и вам нужно сделать так, чтобы утилита uniq использовала такой же критерий сравнения, чего несложно добиться с помощью параметра командной строки -f .

Параметр -f требует от вас обязательной передачи числа, которое соответствует количеству полей, которые нужно пропустить. Например, в нашем случае мы передаем в качестве значения параметр -f значение 1, так как мы хотим, чтобы утилита uniq пропустила лишь первое поле:

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

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

При необходимости вывода всех строк с разделением групп повторяющихся строк с помощью пустой строки вы можете использовать параметр —group . Как и в случае описанного выше параметра —all-repeated , параметр —groups требует от пользователя обязательного указания позиции пустой строки ( prepend , append или both ).

Это пример использования рассматриваемого параметра:

Обратите внимание на параметр -f , который обсуждался в предыдущем разделе.

6. Вывод лишь не повторяющихся строк

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

В нашем случае команда будет выглядеть следующим образом:

Это пример ее использования:

Обратите внимание на параметр -f , который обсуждался в разделе 4.

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

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

Например, предположим, что наш файл содержит следующие строки:

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

А это приведенная выше команда в действии:

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

8. Указание количества символов для сравнения

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

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

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

Это приведенная выше команда в действии:

Читайте также:  Посмотреть все примонтированные папки linux

Так как первые три символа третьей и четвертой строк совпадают, эти строки считаются утилитой идентичными. По этой причине в выводе находится лишь третья строка.

9. Сравнение строк без учета регистра

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

Например, предположим, что мы будем использовать файл с содержимым, аналогичным рассмотренному в предыдущем разделе, но теперь четвертая строка будет начинаться с символов H, O и W в верхнем регистре.

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

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

10. Использование завершающего нулевого символа вместо символа перехода на новую строку

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

Заключение

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

Источник

COREUTILS. Команда uniq. Вывод уникального содержимого

Общий синтаксис программы uniq в linux предельно простой:

unic [OPTIONS] [INPUT [OUTPUT]]

Тоесть, чтобы вывести уникальные строки, например в тестовом файле my_text_file, нужно команде uniq передать его имя в качестве аргумента

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

Неуникальные строки можно посчитать. Для этого передайте quic в качестве опции ключ «-c».

unic -c /home/user/my_text_file

В выводе вы получите таблицу из 2-х колонок, в первой будет указано количество повторяющихся строк, во второй их значение.

В linux uniq также можно попросить печатать только те строки, которые имеют дубликаты, для этого нужно использовать ключ «-d»:

uniq -d /home/user/my_text_file

Опции можно комбинировать, и чтобы посчитать только строки которые имеют дубликаты, следует ввести такую команду:

uniq -d -с /home/user/my_text_file

В противовес ключу «-d» есть ключ «-u», заставляющий uniq выводить только строки, не имеющие дубликата:

uniq -u /home/user/my_text_file

Однако, как мы и освещали в вводой части, uniq работает только последовательно, следовательно строки, содержащиеся в файле, например:

не будут считаться уникальными. Чтобы разрешить эту проблему можно использовать в linux команду uniq совместно с командой sort, перенаправляя вывод одной команды на ввод другой:

sort -n my_text_file | uniq

или же просто использовать sort с ключом «-u»

sort -n -u my_text_file

Возможности и примеры использования утилиты sort мы уже освещали в статье COREUTILS. Команда sort. Сортировка вывода программ

Источник

Оцените статью