gawk — это язык сканирования и обработки шаблонов, который представляет собой реализацию проекта GNU языка программирования AWK. Он соответствует определению языка в стандарте POSIX 1003.1.
Параметры
awk [OPTION...] [pattern {action} ...] [ARGUMENT...]
\a «предупреждающий» символ; обычно ASCII BEL
\b назад
\f подача формы
\n новая строка
\r возврат каретки
\t горизонтальная вкладка
\v вертикальная вкладка
Встроенные переменные
NF – это количество полей в текущей входной записи.
NR – это общее количество входных записей, просмотренных на данный момент.
RS — разделитель входных записей, по умолчанию — новая строка.
FS — разделитель полей ввода, по умолчанию — пробел.
OFS — это разделитель полей вывода, по умолчанию — пробел.
ORS — это разделитель выходных записей, по умолчанию новая строка.
BEGIN и END — это два особых вида шаблонов, которые не проверяются на входных данных. Части действий всех шаблонов BEGIN объединяются, как если бы все операторы были записаны в одном блоке BEGIN.
Массивы
Массивы индексируются выражением в квадратных скобках ([ и ]). Если выражение представляет собой список выражений (expr, expr...), то нижний индекс массива представляет собой строку, состоящую из конкатенации (string) значения каждого выражения, разделенного значением переменной SUBSEP. Это средство используется для моделирования многомерных массивов. Например:
i = “A”; j = “B”; k = “C”
Операторы
Управляющие операторы
Упражнение
Mike Harrington:(510) 548-1278:250:100:175 Christian Dobbins:(408) 538-2358:155:90:201 Susan Dalsass:(206) 654-6279:250:60:50 Archie McNichol:(206) 548-1348:250:100:175 Jody Savage:(206) 548-1278:15:188:150 Guy Quigley:(916) 343-6410:250:100:175 Dan Savage:(406) 298-7744:450:300:275 Nancy McNeil:(206) 548-1278:250:80:75 John Goldenrod:(916) 348-4278:250:100:175 Chet Main:(510) 548-5258:50:95:135 Tom Savage:(408) 926-3456:250:168:200 Elizabeth Stachelin:(916) 440-1763:175:75:300
Вопросы
- Распечатать все номера телефонов
- Распечатать номер телефона Дэна
- Распечатайте фамилию и номер телефона Сьюзен
- Распечатайте имена, начинающиеся с C или E
- Напечатайте имена людей с кодом города 916
- Распечатайте пожертвование Майка. Сумма должна начинаться со знака доллара ($) (например, 250 долларов США, 100 долларов США).
Ответы
- Распечатать все номера телефонов
# awk -F: '{ print $2 }' donors
2. Распечатайте номер телефона Дэна
# awk -F: '$1~/Dan/ {print $2}' donors
3. Распечатайте фамилию и номер телефона Сьюзан.
# awk -F'[: ]' '$1=="Susan" { print $2,$3,$4 }' donors or # awk -F’[: ]’ ‘$1~/Susan/ { print $2,$3,$4 }’ donors
4. Напечатайте имена, начинающиеся с C или E.
# awk -F'[: ]' '$1~/^[CE]/ {print $1}' donors
5. Напечатайте имена людей с кодом города 916.
# awk -F'[: ]' '$3~/^\(916\)$/ {print $1}' donors
6. Распечатайте пожертвование Майка. Сумма должна начинаться со знака доллара ($) (например, 250 долларов США, 100 долларов США).
# awk -F: '$1~/Mike/ {print $1": $"$3", $"$4", $"$5}' donors
Вывод
Сегодня я узнал о awk, языке сканирования и обработки шаблонов, и попрактиковался с параметрами, операторами, переменными и операторами управления, решив некоторые проблемы.