Операционные системы - статьи


Awk-переменные и выражения


В языке awk выделяются две группы переменных: предопределенные

и декларированные в программе. Исходные значения предопределенных

переменных устанавливаются интерпретатором awk в процессе запуска

и выполнения awk-программы.

К предопределенным относятся:

Умолчания:
NR - номер текущей строки

NF - число полей в текущей строке

RS - разделитель строк на вводе

"\0"
FS - разделитель полей на вводе

пробел и/или табуляция
ORS - разделитель строк на выводе

RS
OFS - разделитель полей на выводе

FS
OFMT - формат вывода чиcл

"%.6g"
FILENAME - имя входного файла.

Прочим переменным пользователь может присваивать начальные значения.

По умолчанию "0" или пустая строка (что здесь равнозначно!).

Типы переменных:

  • позиционные,

  • числа с плавающей точкой,

  • строка символов,

  • массив.

Интерпретатор awk рассматривает переменную как строковую,

пока не возникает необходимость выполнить операции:

  • если пробел (конкатенация), то строки;

  • если "+", то числа с плавающей точкой.

Примеры:

1. awk '{a = $3 $4; print a}' f-awk

awk '{a = $3+$4; print a}' f-awk

Результат:

198050

197940

197940

197060

2030

2019

2019

2030

2. awk '{}

END {a = 2 + 2 ; print a}' < f-awk

awk '{}

END {a = 2 + "2" ; print a}' < f-awk

awk '{}

END {a = 2 + "два" ; print a}' < f-awk

awk '{}

END {a = "два"+"два" ; print a}' < f-awk

awk '{}

END {a = 2.2 + 2.000 ; print a}' < f-awk

Результат:

4

4

2

0

4.2

Массив не об'является, а начинае существовать в момент

первого использования. Индекс массива - любое ненулевое значение

или строка. Массивы ассоциативные, т.е. не по вычисляемому индексу,

а по совпадению содержания, например:

day [Jan][31] = Mon

day [Feb][01] = Tue

day [Feb][02] = Wed

Массивы удобно использовать при суммированиях, например

записи выплат имеют вид (файл "p-1"):

John 100

Mary 200

Mary 200

John 100

John 300

awk '{sum[$1] += $2; print $1 sum[$1]} ' < p-1

Результат (поименный нарастающий итог):

John100

Mary200

Mary400

John200

John500

Операции как в Си=, +=, -=, *=, /=, %=, +, /, %, ++, --.

Сравнения чисел, если оба числа, иначе - строк

<, <=, ==, !=, >=, >

Логические операции!, , &&

Операция "пробел"конкатенация.




Начало  Назад  Вперед



Книжный магазин