
- •Программирование вывода текста awk
- •Внимание. В awk могут быть проблемы с русской буквой я/Я.
- •Полная командная строка для awk
- •Оператор-шаблон используется для выбора строк из файла,
- •Внимание! Нельзя одновременно опускать и шаблон и действие.
- •Если оператор-шаблон и/или оператор действия задаются в командной строке, то они заключаются в
- •Записи делятся на поля, разделенные
- •В awk не существует оператора read. awk автоматически получает каждую запись.
- •1. Обращение к полям
- •Например, пусть у нас имеется файл с именем cars.file, содержащий:
- •Причем при выводе на экран между наименованием марки и наименованием фирмы будет стоять
- •c) Оператор print “” печатает пустую строку, о оператор print печатает текущую строку
- •Этот символ можно переопределить, используя в качестве разделителя любой одиночный символ.
- •Второй способ переопределения
- •Однако, если в качестве разделителя
- •2. Выполнение команд из входного файла
- •Тогда предыдущий пример можно выполнить так:
- •Итак, выполнение команд из файла необходимо делать в следующей последовательности:
- •Если в одной строке несколько операторов-
- •В операторе print фрагменты, отделяемые запятой, печатаются через символы разделения полей выходного потока,
- •Для полного контроля над выходным потоком используется оператор printf,
- •Если нет выходного потока, то считается, что данные удовлетворяют соответствующему критерию.
- •Причем необходимо помнить, что это разные шаблоны.
- •В шаблонах можно применять метасимволы, как и в функции grep:
- •A. Шаблоны BEGIN и END
- •Некоторые версии awk требуют, чтобы шаблон BEGIN был первым шаблоном программы, а шаблон
- •задает строки от 10-ой до 20-ой
- •Например, в файле file.me находятся строки:
- •Если выражение арифметическое, то
- •C. Использование арифметических
- •-переменную SUM, введенную пользователем;
- •В этих всех примерах использование опции -f эквивалентно набору операторов в командной строке
- •Встроенные переменные awk
- •OFMT - формат вывода чисел ( по умолчанию принят %6g (См. printf ),
- •Операции, выполняемые awk
- •Операции отношения
- •В awk любое выражение можно использовать с любой операцией. Преобразование числа в строку
- •Встроенные функции awk
- •rand()
- •split (S,A,C) - разбиение строки S на массив
- •tolower (Str)- переводит символы строки Str в нижний регистр;
- •sub (Re, SubStr, Str) – замещает в строке
- •match (Str, Re) - возвращает позицию в строке Str, в которой располагается
- •Примеры:
- •2. Пусть в файле file.txt находятся строки:
- •В результате получаем:
- •Массивы
- •Пример.
- •В результате должно быть: John 200,
- •Однако порядок появления индексов неопределен, поэтому может возникнуть необходимость в их сортировке.
- •Такой прием очень удобен, чтобы определить, например, частоту появления
- •Пример вывода на экран: the 102
- •Здесь в первом цикле for выбирается каждое слово из входной строки и заполняется
- •Для удаления некоторого элемента из
OFMT - формат вывода чисел ( по умолчанию принят %6g (См. printf ),
OFS - строка-разделитель полей в выходном потоке
(по умолчанию принят "Пробел"),
ORS - Строка-разделитель строк в выходном потоке
(по умолчанию принят символ перевода строки).
42
Операции, выполняемые awk
=
+ и += - и -= * и *= / и /=
% и %=
^ и ^= |
|
II |
- |
&& |
- |
! |
- |
-присваивание
-сложение;
-вычитание;
-умножение;
-деление;
-деление по модулю
-возведение в степень; операция "ИЛИ" операция "И"
отрицание значения выражения
43
Операции отношения
>>= < <= == !=
Операции соответствия
~ - операция соответствия; !~ - операция несоответствия.
пусто - конкатенация строк
++ - операции инкремента и декремента (префиксные и постфиксными ).
44
В awk любое выражение можно использовать с любой операцией. Преобразование числа в строку и строки в число производится автоматически.
Для принудительного преобразования
в число необходимо добавить ноль: str = "3"; str += 0;
Получим число 3.
Для принудительного преобразования в строку необходимо добавить пустую строку:
num = 3; num = num "";
Получаем строку "3".
45
Встроенные функции awk
cos(Expr) |
- вычисление косинуса; |
|
sin(Expr) |
- вычисление синуса; |
|
log(Expr) |
- вычисление натурального |
|
|
логарифма; |
|
exp(Expr) |
- вычисление возведения в |
|
|
степень величины Е; |
|
sqrt(Expr) |
- вычисление квадратного |
|
|
корня; |
|
int(Expr) |
- отбрасывание целой |
|
|
части десятичного числа; |
|
atan2(y,x) |
- вычисление арктангенса |
|
отношения y/x в пределах [-90о,90о]; |
46 |
rand() |
- выдает случайное число в |
пределах (0;1]; |
|
srand(Expr) |
- устанавливает Expr в новое |
значеие для |
rand(); |
getline () - чтение следующей входной строки.
Возвращает 0 в случае конца файла, в противном случае - 1. Изменяет $0,$1,…,NF,FNR,
NR.
getline Var - считывает следующую запись в переменную Var. В этом случае разбиение на поля не происходит, то есть NF остается равной нулю, FNR и NR увеличиваются. Функция getline может применяться с перенаправлением ввода:
47
getline < filename getline Var < filename
Если filename эквивалентно стандартному вводу, то
происходит ввод с клавиатуры.
index (S1,S2) - положение строки S2 в строке S1. Возвращает нуль, если строка S2 не входит S1;
length (S) - длина строки S;
48
split (S,A,C) - разбиение строки S на массив
A[1],A[2]...A[n] по символу С, который должен находиться в двойных кавычках. Возвращает n. Если символ C не задан, то
применяется текущее значение переменной
FS.
sprintf (Fmt,...) - форматирование в соответствии со спецификацией Fmt; substr (S,M,N) - выделение подстроки в N символов строки S, начинающейся с индекса M. Если N отсутствует, то тогда до конца строки.
49
tolower (Str)- переводит символы строки Str в нижний регистр;
toupper (Str) - переводит символы строки Str в верхний регистр;
systime |
- возвращает текущее |
время в секундах по Гринвичу (по UTC), |
|
начиная отсчет с 1 января 1970 года; |
strftime (Fmt,t) - возвращает время t по формату Fmt.
50
sub (Re, SubStr, Str) – замещает в строке
Str подстрокой SubStr найденное первое совпадение шаблону (регулярному выражению) Re;
gsub (RegExp, SubStr, Str) – производит глобальное замещение в строке Str подстрокой SubStr найденные совпадения шаблону Re. Если в этих двух функциях Str опущена, то действие происходит над переменной $0.
51