Як використовувати команду uniq в Linux

| | 0 Comments| 10:20 PM
Categories:

Команда Linux uniq перебирає ваші текстові файли, шукаючи унікальні або повторювані рядки. У цьому посібнику ми розповімо про його універсальність та особливості, а також про те, як ви можете максимально використовувати цю чудову утиліту.

Пошук відповідних рядків тексту в Linux

Команда uniq швидкий, гнучкий і чудовий у своїй справі. Однак, як і багато команд Linux, у ньому є кілька примх — це добре, якщо ви про них знаєте. Якщо ви зважитеся, не маючи трохи інсайдерських ноу-хау, ви цілком можете почухати голову над результатами. Ми будемо вказувати на ці примхи, як ми будемо.

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

Давайте запалимо!

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

У нас є текстовий файл, який містить текст пісні Роберта Джонсона пісня Я вірю, що я витру свою мітлу. Давайте подивимося, що з цього робить uniq.

Ми введемо наступне, щоб передати вихід у менше:

uniq dust-my-broom.txt | less

The

Ми отримуємо всю пісню, включаючи повторювані рядки, менше:

Вихід з

Схоже, це не унікальні рядки чи повторювані рядки.

Правильно, тому що це перша примха. Якщо ви запускаєте uniq без параметрів, він веде себе так, ніби ви використовували параметр -u (унікальні рядки). Це вказує uniq друкувати лише унікальні рядки з файлу. Причина, по якій ви бачите повторювані рядки, полягає в тому, що для того, щоб uniq вважав рядок дублікатом, він повинен бути сусіднім із його дублікатом, саме тут і виконується сортування.

  Як увімкнути автоматичний вхід в Linux

Коли ми сортуємо файл, він групує повторювані рядки, а uniq розглядає їх як дублікати. Ми будемо використовувати сортування у файлі, передати відсортований вихід у uniq, а потім передати кінцевий результат у менше.

Для цього вводимо наступне:

sort dust-my-broom.txt | uniq | less

The

Відсортований список рядків відображається в меншій частині.

Рядок «Я вірю, що притрушу мітлу», безперечно, з’являється в пісні не раз. Фактично, це повторюється двічі в перших чотирьох рядках пісні.

Отже, чому він відображається в списку унікальних рядків? Оскільки вперше рядок з’являється у файлі, він унікальний; лише наступні записи є дублікатами. Ви можете розглядати це як перелік першого входження кожного унікального рядка.

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

Вводимо таку команду:

sort dust-my-broom.txt > sorted.txt

The sorted.txt” у вікні терміналу.’ width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

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

Підрахунок дублікатів

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

Введіть таку команду:

uniq -c sorted.txt | less

The

Кожен рядок починається з того, скільки разів цей рядок з’являється у файлі. Однак ви помітите, що перший рядок порожній. Це означає, що у файлі є п’ять порожніх рядків.

Вихід з

Якщо ви хочете, щоб вихідні дані були відсортовані в порядку чисел, ви можете передати вихідні дані з uniq у сортування. У нашому прикладі ми будемо використовувати параметри -r (зворотне) і -n (числове сортування) і передавати результати в менше.

Набираємо наступне:

uniq -c sorted.txt | sort -rn | less

The

Список сортується в порядку спадання на основі частоти появи кожного рядка.

Перелік лише повторюваних рядків

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

  Як використовувати Gkill, щоб зупинити проблемні програми, що працюють на Linux

Щоб використовувати цю опцію, ми вводимо наступне:

uniq -d sorted.txt

The

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

Вихід з

Ми також можемо об’єднати параметри -d (повтор) і -c (підрахунок) і передати вихід через сортування. Це дає нам відсортований список рядків, які з’являються принаймні двічі.

Щоб скористатися цим параметром, введіть наступне:

uniq -d -c sorted.txt | sort -rn

The

Перелік усіх повторюваних рядків

Якщо ви хочете побачити список кожного дубльованого рядка, а також запис для кожного разу, коли рядок з’являється у файлі, ви можете використовувати параметр -D (усі повторювані рядки).

Щоб скористатися цією опцією, введіть наступне:

uniq -D sorted.txt | less

The

Перелік містить запис для кожного дубльованого рядка.

Якщо ви використовуєте параметр –group, він друкує кожен дубльований рядок з порожнім рядком або перед (попереду), або після кожної групи (додати), або обидва перед і після (обидва) кожної групи.

Ми використовуємо append як наш модифікатор, тому вводимо наступне:

uniq --group=append sorted.txt | less

The

Групи розділені порожніми рядками, щоб їх було легше читати.

Вихід з

Перевірка певної кількості символів

За замовчуванням uniq перевіряє всю довжину кожного рядка. Однак якщо ви хочете обмежити перевірки певною кількістю символів, ви можете використовувати параметр -w (перевірка символів).

У цьому прикладі ми повторимо останню команду, але обмежимо порівняння до перших трьох символів. Для цього ми вводимо таку команду:

uniq -w 3 --group=append sorted.txt | less

The

Результати та групи, які ми отримуємо, дуже різні.

Вихід з

Усі рядки, які починаються з «I b», згруповані разом, оскільки ці частини рядків ідентичні, тому вони вважаються повторюваними.

Аналогічно, усі рядки, які починаються на «Я», розглядаються як повторювані, навіть якщо решта тексту відрізняється.

Ігнорування певної кількості символів

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

  Як перевірити безпеку ПК з Linux за допомогою Lynis

Нижче наведено версію нашого відсортованого файлу з пронумерованими рядками.

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

uniq -s 3 -d -c numbered.txt

The

Рядки виявляються як повторювані та підраховуються правильно. Зверніть увагу, що номери рядків, які відображаються, є номерами першого входження кожного дубліката.

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

Ми вводимо наступне, щоб сказати uniq ігнорувати перше поле:

uniq -f 1 -d -c  numbered.txt

The

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

Ігноруючи регістр

За замовчуванням uniq чутливий до регістру. Якщо одна і та ж буква з’являється закритою та написаною в нижньому регістрі, uniq вважає рядки різними.

Наприклад, перевірте вихід з наступної команди:

uniq -d -c sorted.txt | sort -rn

The

Рядки «Я вірю, що я витру свою мітлу» та «Я вірю, що притрушу свою мітлу» не розглядаються як повторювані через різницю у регістрі «В» у «вірити».

Однак якщо ми включимо параметр -i (ігнорувати регістр), ці рядки вважатимуться повторюваними. Набираємо наступне:

uniq -d -c -i sorted.txt | sort -rn

The

Тепер рядки розглядаються як повторювані та згруповані разом.

Linux надає у ваше розпорядження безліч спеціальних утиліт. Як і багато хто з них, uniq не є інструментом, яким ви будете користуватися щодня.

Ось чому велика частина досвіду роботи з Linux полягає в тому, щоб запам’ятати, який інструмент вирішить вашу поточну проблему, і де ви можете знайти його знову. Але якщо ви практикуєтеся, ви будете на хорошому шляху.

Або ви завжди можете просто знайти How-To Geek — у нас, мабуть, є стаття про це.