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}'

Посилання ред.