Хороші файли і хороші фільтри

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

Програми UNIX виводять дані у форматах, придатних для введення в інші програми Файли, призначені для фільтрації, складаються з рядків тексту, в них відсутні прикраси у вигляді заголовків, трейлерів і порожніх рядків Кожен рядок зберігає змістовні дані – імя файлу, слово, опис виконуваного процесу, так що програми типу wc і grep можуть підрахувати обєкти або знайти їх по імені Якщо для кожного обєкта є додаткова інформація, файл як і раніше складається з рядків, але вже розділених на поля пробілами або табуляціями, як у виведенні команди ls-l Полу чаю дані, розділені на поля, такі програми, як awk, можуть вибирати, обробляти і перегруповувати дані

Конструкція фільтрів підпорядковується кільком загальними правилами Всі вони виводять в стандартний висновок результат обробки файлів-аргументів чи даних зі стандартного виводу, якщо були запущені без аргументів Аргументи завжди визначаютьвведенняі ніколи – висновок, 1 тому висновок команди завжди може бути направлений в конвеєр Необовязкові аргументи (або аргументи, які не є іменами файлів, наприклад шаблони grep) передують іменам фай лов І нарешті, повідомлення про помилки слід направляти в стандартний висновок помилок, щоб вони не зникли десь в конвеєрі

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

1 В одній з ранніх версій UNIX файлова система була знищена службової програмою, яка порушила це правило: команда цілком невинного виду заповнила «сміттям» весь диск

взаємодії, проілюстровану безліччю прикладів в цій книзі Мабуть, найбільш наочно це продемонстровано в програмі підрахунку слів в кінці розділу 42 Якщо хоч одна з програм зажадає імя вхідного або вихідного файлу або запросить інтерактивного введення параметрів, або виведе заголовки або трейлери, то конвеєр не спрацює І, звичайно ж, якби система UNIX не мала конвеєрів, кому-небудь довелося б написати таку програму Але конвеєри існують, працюють і їх досить легко використовувати, якщо ви володієте потрібними інструментами

Вправа 415Команда ps виводить поясняющий заголовок, а ls-l

виводить загальну кількість блоків у файлах Прокоментуйте ~

Історія та бібліографія

Хороший огляд алгоритмів порівняння з шаблоном наведено в статті автора egrep Ала Ахо (Al Aho) «Pattern matching in strings» (Порівняння із зразком у рядках), виданої «Proceedings of the Symposium on Formal Language Theory »в Санта-Барбарі в 1979 році

Автором ідеї та реалізації програми sed є Лі Мак-Магон (Lee McMahon), узявши за основу редактор ed

Програма awk далеко не так елегантно реалізована Алом Ахо (Al Aho), Пітером Вейнбергер (Peter Weinberger) і Брайаном Керніганом (Brian Kernighan) Та обставина, що мова названий за іменами своїх авторів, також чи не свідчить про багату уяву останніх Її структура розглянута розробниками у статті «AWK – a pattern scanning and processing language» (AWK – мова пошуку та обробки за шаблоном), надрукованій у «Software – Practice and Experience» у липні 1978 року Основними джерелами ідей awk стали мову SNOBOL4, sed, мова верифікації, створений Марком Рочкіндом (Marc Rochkind), програми yacc і lex і, зрозуміло, мова Сі Насправді схожість awk і Сі навіть породжує труднощі, так як мова схожа на Сі, але таким не є Частина конструкцій відсутня, а ті, що Тобто, в чомусь відрізняються

У статті Дага Камера (Doug Comer) «The flat file system FFG: a database system consisting of primitives» (Плоска файлова система FFG: база даних на основі примітивів), що зявилася в «Software – Practice and Experience »в листопаді 1982 року, обговорюється створення бази даних з використанням awk і оболонки

Джерело: Керниган Б, Пайк Р, 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>

*

*