Інші фільтри UNIX

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

Почнемо з програми sort, можливо, найбільш корисною з усіх Основні відомості про неї були приведені у розділі 1: програма сортує надходять на вхід рядка за значеннями кодів ASCII-символів Крім цього очевидного дії, виконуваного за замовчуванням, є безліч інших способів сортування, для кожного з яких sort має відповідний параметр Наприклад, параметр-f викликає

«Згортку» нижнього і верхнього регістрів, так що відмінності між ними ігноруються Параметр-d (словниковий порядок) ігнорує при порівнянні будь-які символи, крім букв, цифр та прогалин

Найчастіше виконується порівняння по символах, але іноді потрібно порівнювати числа Параметр-n забезпечує сортування по числовим значенням, а параметр-r змінює результат операції порівняння на протилежний Таким чином,

$ ls | sort-f Сортує файли в алфавітному порядку

$ ls-s | sort-n Сортує файли по зростанню розміру

$ ls-s | sort-nr Сортує файли за спаданням розміру

За замовчуванням sort порівнює рядки цілком, але їй можна вказати, по якому конкретному полю повинна виконуватися сортування Запис +m означає, що перші m полів повинні бути проігноровані при порівнянні +0 – Це порівняння з початку рядка Наприклад,

$ ls-l | sort +3 nr Сортування за розміром за спаданням

$ who | sort +4 n Сортування за часом реєстрації за спаданням

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

Можна поставити декілька параметрів сортування, як у прикладі, взя тому зі сторінки керівництва sort (1):

$ sort +0 f +0-u імена5файлов

Тут +0 f сортує рядки без урахування регістру, проте ідентичні рядки не обовязково сусідять Наступний параметр +0 виконує сортування співпадаючих рядків у звичайному алфавітному порядку Нарешті, -U виключає дублікати рядків Таким чином, отримавши набір слів, по одному на рядку, команда виведе список неповторюваних-

щихся слів Предметний покажчик оригінального видання цієї книги був підготовлений аналогічної командою sort з використанням додаткових можливостей, описаних в sort (1)

Команда uniq послужила прототипом прапора-u команди sort: вона відкидає суміжні дублюються рядка, залишаючи тільки одну Наявність для цієї мети окремої програми дозволяє вирішувати заду чи, що не повязані з сортуванням Наприклад, uniq може видалити повто ряющіеся порожні рядки, навіть якщо вхідний файл не відсортований

Параметри дозволяють вибрати спосіб обробки дублів: uniq-d виве дет тільки ті рядки, які були дубльовані uniq-u виводить унікальні рядки (тобто не повторюються) а uniq-c підраховує кількість входжень кожного рядка Нижче буде наведено приклад

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

$ comm  –12 f1  f2

виведе лише рядки, що увійшли в обидва файлу, а

$ comm  –23 f1  f2

виведе рядки, присутні тільки в першому файлі й відсутні у другому Це можна використовувати для порівняння каталогів або списку слів зі словником

Команда tr виконує заміну символів у вхідному файлі Найчастіше вона застосовується для заміни регістра:

$ tr az AZ Замінити нижній регістр на верхній

$ tr AZ az Замінити верхній регістр на нижній

Команда dd помітно відрізняється від усіх команд, розглянутих досі Вона призначена головним чином для обробки даних на магнітних стрічках з інших систем – саме імя нагадує про мову управління завданнями OS/3601 Команда може виконувати заміну регістра (з синтаксисом, що істотно відрізняється від tr) перетворення коду ASCII в EBCDIC і назад читання і запис даних блоками фіксованого розміру із заповненням відсутніх полів пробілами, що використовується в деяких інших операційних системах На практиці команда dd часто застосовується для роботи з «сирими» Неформатована даними незалежно від їх походження, вона також має можливість обробки двійкових даних

1 Мова керування завданнями (Job Control Language, JCL) для IBM System / 360 містив детальну специфікацію визначення наборів даних (Dataset Definition, DD) для пристроїв введення-виведення – Прямуючи ред

Щоб продемонструвати можливості спільної роботи фільтрів, розглянемо конвеєр з команд, який виводить 10 слів, наиб леї часто зустрічаються у вхідному файлі:

cat  $* |

tr –sc  A–Za–z  \012 | Замінює всі небукви на символи нового рядка

sort | uniq  –c  | sort –n | tail  |

5

Команда cat займається збором файлів і передає їх у вхідний потік tr Команда tr взята з керівництва: вона замінює всі послідовності символів, які не є буквами, символом нового рядка, поміщаючи, таким чином, кожне слово на окремий рядок Потім список сортується, і команда uniq-c видаляє повторювані слова, вставляючи перед рештою словами лічильник входжень, за яким виконується сортування командою sort-n (Таке поєднання двох команд sort, оточуючих команду uniq, зустрічається настільки часто, що може вважатися ідіомою) Внаслідок отриманий список слів, що зустрічаються в документі, відсортований в порядку збільшення частоти використання

Команда tail виводить 10 найпопулярніших слів, а 5 розташовує їх в пяти стовпцях

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

Вправа 43Використовуйте команди цього розділу для програми перевірки орфографії за словником / usr / dict / words У чому недоліки такого підходу і як їх виправити ~

Вправа 44Напишіть програму підрахунку слів на своєму люби мом мові програмування і порівняйте її розмір, швидкість виконання і гнучкість з конвеєром команд Скільки буде потрібно зусиль для перетворення її в програму перевірки орфографії ~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*