команда Uniq с примерами

Thank you for reading this post, don't forget to subscribe!

Коман­да uniq в Unix и Linux исполь­зу­ет­ся для филь­тра­ции дуб­ли­ро­ван­но­го тек­ста. Она может исполь­зо­вать­ся сама по себе, но обыч­но исполь­зу­ет­ся вме­сте с дру­ги­ми коман­да­ми, таки­ми как опре­де­ле­ние избы­точ­ной инфор­ма­ции в файле.

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

 

Когда вы запус­ка­е­те uniq без пара­мет­ров, она будет исполь­зо­вать­ся с stdin и stdout для вво­да и вывода.

Хотя исполь­зо­ва­ние stdin воз­мож­но при исполь­зо­ва­нии буфе­ра обме­на (копирование/вставка), но это не самое прак­тич­ное использование.

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

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

 

Таким обра­зом, вы сра­зу зна­е­те, что не може­те дове­рять про­грам­ме, что­бы иден­ти­фи­ци­ро­вать каж­дый дуб­ли­кат само­сто­я­тель­но. Есть несколь­ко спо­со­бов обой­ти это, и обыч­но это про­ис­хо­дит с помо­щью коман­ды sort .

Мы пока­жем вам это поз­же в этой ста­тье. Во-пер­вых, поз­воль­те нам пока­зать неко­то­рые при­ме­ры, что­бы позна­ко­мить вас с ‘uniq’, преж­де чем сме­ши­вать дру­гие коман­ды и, воз­мож­но, сби­вать с толку.

 

7 примеров команды uniq в Linux

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

 

Пример 1. Использование команды uniq по умолчанию

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

 

Читать  Как одно­вре­мен­но выпол­нять коман­ды в Linux

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

 

Пример 2: Вывести отфильтрованные результаты в файл назначения

Вы може­те сохра­нить этот вывод, что­бы вы мог­ли лег­ко отре­дак­ти­ро­вать или сохра­нить его. Вы може­те напра­вить наш вывод в отдель­ный файл вме­сто обыч­но­го stdout (тер­ми­на­ла). Важ­но отме­тить, что вы не може­те исполь­зо­вать этот фор­мат для пере­опре­де­ле­ния исход­но­го файла.

 

Вот содер­жи­мое выход­но­го файла:

 

Пример 3: Использование ‘-c’, чтобы получить количество повторных строк

Этот вари­ант доволь­но поня­тен. Про­грам­ма доба­вит счет в нача­ло каж­дой строки.

 

Пример 4: печатать только повторяющиеся строки с ‘-d’

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

 

Пример 5: печатать только уникальные строки с ‘-u’

Здесь вы полу­чи­те обрат­ный вывод преды­ду­щей коман­ды. Ни одна из этих команд не повто­ря­ет­ся в файле.

 

Пример 6: Игнорировать поля или символы с помощью uniq [‘-f’ и ‘-s’]

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

Каж­дый из них исполь­зу­ет сле­ду­ю­щий синтаксис

В каж­дом из этих при­ме­ров «N» – это коли­че­ство эле­мен­тов, кото­рые вы хоти­те про­пу­стить. Когда вы про­пу­сти­те это коли­че­ство эле­мен­тов, uniq нач­нет срав­не­ние в этой точ­ке, а не срав­ни­ва­ет всю строку.

Опция ‘f’ про­пу­стит назна­чен­ное коли­че­ство полей. Поля будут интер­пре­ти­ро­вать­ся с исполь­зо­ва­ни­ем пробела.

 

Если вы хоти­те исполь­зо­вать коман­ду uniq во вто­ром столб­це, вам при­дет­ся про­пу­стить пер­вое поле сле­ду­ю­щим образом:

 

Как вы може­те видеть, для одной и той же стро­ки тре­бу­ют­ся «red fish» и «green fish», посколь­ку пер­вое поле (с цве­та­ми) было про­игно­ри­ро­ва­но. Если вы исполь­зу­е­те здесь опцию count, она пока­жет коли­че­ство най­ден­ных уни­каль­ных строк:

 

Зачем вам это нуж­но? Мы дадим вам прак­ти­че­ский сце­на­рий. Мно­гие фай­лы жур­на­лов име­ют вре­мен­ную мет­ку в нача­ле строк. Если вы хоти­те най­ти в таком фай­ле толь­ко уни­каль­ные стро­ки, вы може­те про­пу­стить пер­вое поле с отмет­кой вре­ме­ни с пара­мет­ром -f.

Точ­но так же вы може­те про­пу­стить опре­де­лен­ное коли­че­ство символов.

 

Пример 7. Используйте ‘-w’, чтобы сравнить только N символов

Пара­метр ‘-w’ поз­во­ля­ет нам ука­зать точ­ное коли­че­ство сим­во­лов, кото­рое будет исполь­зо­вать­ся в нашем сравнении.

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

 

Все стро­ки, начи­на­ю­щи­е­ся с «/usr», теперь обо­зна­ча­ют­ся как «оди­на­ко­вые» с точ­ки зре­ния программы.

Это может ока­зать­ся полез­ным, если вы ище­те кон­крет­ное собы­тие журнала.

 

Бонус: избегайте неполных совпадений, используя «sort» и «uniq» одновременно.

Вы може­те запус­кать эти коман­ды отдель­но для дости­же­ния того же эффек­та, но если вы нико­гда не исполь­зо­ва­ли кон­вей­ер (сим­вол |) в Linux, это отлич­ный спо­соб узнать о них.

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

Это при­мер вво­да, кото­рый мы соби­ра­ем­ся использовать:

 

Теперь давай­те отсор­ти­ру­ем вход­ной файл и затем исполь­зу­ем коман­ду uniq. Коман­да sort пере­упо­ря­до­чи­ва­ет текст так, что все эле­мен­ты сна­ча­ла рас­по­ла­га­ют­ся в сосед­нем поряд­ке. Затем, когда коман­да uniq запу­ще­на, она нахо­дит толь­ко 3 уни­каль­ные стро­ки в файле.

Если вы изме­ни­те поря­док, все изме­нит­ся. Выпол­не­ние коман­ды ‘uniq’ сна­ча­ла иден­ти­фи­ци­ру­ет толь­ко смеж­ные дуб­ли­ка­ты, а затем они будут отсор­ти­ро­ва­ны в алфа­вит­ном поряд­ке с помо­щью коман­ды ‘sort’.

 

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

Обра­ти­те вни­ма­ние, что содер­жи­мое фай­ла оста­ет­ся неиз­мен­ным так же, как и при отдель­ном запус­ке команд. Соеди­не­ние двух команд вме­сте так­же сохра­ня­ет резуль­та­ты в «памя­ти» систе­мы. Если вы запус­ка­е­те их отдель­но, вы не смо­же­те полу­чить эти резуль­та­ты, пока не созда­ди­те новый файл и не исполь­зу­е­те его для пере­за­пи­си содер­жи­мо­го ори­ги­на­ла перед выпол­не­ни­ем вто­рой команды.