Awk — це мова програмування, призначена для сканування та обробки зразків. Основним застосуванням мови Awk є обробка текстових документів. Вона гарно пристосована до малих проєктів, в яких необхідне форматування та обробка текстової інформації, і має деякі властивості, корисні для роботи з базами даних. Її основні функції обробки текстів вийшли з сімейства інструментів, подібних до grep операційної системи Юнікс.

AWK
Парадигмаскриптова, процедурна, подійно-орієнтована
Дата появи1977
ТворціАльфред Ахо і Браян Керніган
РозробникАльфред Ахо, Пітер Вайнбергер, Браян Керніган
Останній релізIEEE Std 1003.1-2004 (POSIX) / 1985
Діалектиold awk oawk 1977, new awk nawk 1985, GNU Awk gawk
Під впливом відC, SNOBOL4, Bourne shell
Вплинула наPerl, Korn Shell (ksh93, dtksh, tksh), Lua
Операційна системаБагатоплатформова
Репозиторій вихідного кодуgithub.com/onetrueawk/awk
Вебсайтcm.bell-labs.com/cm/cs/awkbook/index.html

AWK розроблений у 1970-х роках і не зазнав значних змін з середини 1980-х років, в яких був визначений основний кістяк мови, що дало змогу протягом останніх десятиріч зберегти первісну стабільність і простоту мови. Незважаючи на похилий вік, AWK досі активно використовується адміністраторами для виконання рутинних робіт, пов'язаних з парсингом різного роду текстових файлів і генерації нескладної статистики.

Структура програми на AWK

ред.
 
Короткий довідник по POSIX AWK

«AWK — мова для обробки файлів тексту. Файл розглядається як послідовність записів, і без обумовлення кожен рядок є записом. Кожен рядок розбивається на послідовність полів, тому можна говорити про перше слово у рядку як перше поле, друге слово — друге поле і т. д.. Програма на AWK є послідовністю тверджень типу шаблон-дія. AWK читає по одному рядку за раз. Рядок сканується на відповідність кожному шаблону в програмі, і у разі збігу виконується відповідна дія.» — Альфред Ахо

Програма на AWK — послідовність пар типу шаблон-дія, що записуються як:

умова { дія }

де умова зазвичай є виразом, а дія — послідовністю команд. Вхідні дані розділяються на записи, які без обумовлення розділяються символом нового рядка, у такий спосіб вхідні дані поділяються на рядки. Програма по черзі тестує кожен запис на відповідність кожній з умов і виконує дії, де вирази істинні.

Крім таких простих умов, як, наприклад, foo == 1 або /^foo/, умова може називатися BEGIN або END, що відповідає виконанню перед початком читання записів і після закінчення обробки, відповідно.

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

Приклади програм

ред.

Hello World

ред.

Звичайна програма Hello World, написана на AWK:

BEGIN { print "Hello, world!" }

Потрібно звернути увагу, що тут не потрібно явного оператора виходу exit, тому що єдиним шаблоном є BEGIN; не здійснюється також обробка аргументів командного рядка.

Вивести всі рядки з довжиною понад 80 символів

ред.

Вивести всі рядки з довжиною понад 80 символів. Зауважте, що дію не вказано явно, тож виконується дія за замовчуванням — виведення поточного рядка.

length($0) > 80

Вивести певні колонки кожного рядка

ред.

Колонки розділені пробілами. $5 — п'ята колонка.

ls -l | awk '{print $5, $9}'

Посилання

ред.