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



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

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

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

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

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

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




    Содержание  Назад  Вперед