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
Операции как в Си | =, +=, -=, *=, /=, %=, +, /, %, ++, --. | ||
Сравнения чисел, если оба числа, иначе - строк | <, <=, ==, !=, >=, > | ||
Логические операции | !, , && | ||
Операция "пробел" | конкатенация. |