Это старая версия (1.31) ЯзыкAWK.

Содержание

Язык AWK

Язык AWK был спроектирован сотрудниками Bell Labs как инструменты для работы с текстом. Есть в больнистве дистрибутивов линукс. Само название AWK является аббревиатурой фамилий его разработчиков Alfred Aho, Peter Weinberger, и Brian Kernighan.

Основы языка

AWK как и ЯзыкSed? ориентирован на построчную обработку текста. AWK может быть как частью конвеера так и работать c файлами. Файл трактуется как набор записей(records). В свою очередь запись состоит из последовательности полей(fields). По умолчанию в AWK строка рассматривается как запись, тогда первое слово в строке будет первым полем, второе -- вторым и т.д.

 $ echo 'Hello, World!' | awk '{ print $0 }'
 $ cat file.csv | sed -n '2 { p; }' | awk -F'\t' 'END { print NF; }'

Структура программы на AWK выглядит сдедующим образом:

    шаблон { действие }

AWK сканиурет входной поток на наличие шаблонов, в случае совпадения выполняется указанные действия. Как шаблон так и действие могут отсутствовать, но не одновременно. При отсутствии шаблона действие применяется ко всем строкам. Если отсутствует действие, то каждая строка содержащая шаблон просто печатается.

В AWK существуют 2 специальных шаблона - BEGIN и END. Действие, описанное для шаблона BEGIN выполняется до обработки первой записи, действие для шаблона END выполняется после обработки последней записи. Например:

 $ echo -e "1\n2\n3"| awk 'BEGIN {a = 0} {a += $1} END {printf("total sum is %d\n", a)}'
 total sum is 6

На самом деле в примере выше блок с BEGIN лишний так как любая неинициализированная переменная содержит 0.

Переменные

AWK и Sed

Сравнение AWK с другими языками программирования