
- •Источники справочной информации
- •Страницы интерактивного руководства man
- •Определения
- •Команды
- •Комментарии
- •Синтаксис команды
- •Синтаксис
- •Описание
- •Синтаксис команды
- •Использование
- •Ключи
- •Список ключей
- •Примеры
- •Поиск в текущей директории
- •Поиск в определенном каталоге
- •Поиск по нескольким именам файлов
- •Поиск файлов определенного типа
- •Вывод расширенной информации о файле
- •Выполнение команды
- •Поиск в зависимости от времени создания
- •Поиск файлов принадлежащих определенному пользователю
- •Игнорирование ошибок
- •Синтаксис
- •1. Структура awk-программы
- •2. Вызов awk
- •3. awk-переменные и выражения
- •4. Примеры awk-программ
- •5. Селекторы
- •7. Действия
- •Операторы управления
- •Структурные операторы
- •8. Ввод и вывод данных
- •9. Встроенные функции
- •Использование
- •Параметры запуска
- •Использование
- •Параметры команды
- •Синтаксис
- •Назначение и синтаксис
- •В UNIX
- •В UNIX
- •Использование
- •Примеры
- •Использование
- •Использование
- •Параметры запуска
- •Использование
- •Алгоритм
- •Использование
- •Параметры запуска
- •Использование
- •Параметры запуска
- •Примеры
- •Пример работы
- •Синтаксис
- •Описание
- •Параметры
- •Синтаксис
- •Выводимая информация
- •Параметры STAT
- •Примеры использования
- •Примечания
- •crontab
- •Графический интерфейс
- •Синтаксис
- •Описание
- •Синтаксис
- •Параметры
- •Список ключей
- •Использование
- •Размонтирование командой umount
- •-o Атрибуты доступа
- •mount --bind
- •Файл конфигурации
- •Пример
- •Ключи
- •Синтаксис
- •Описание
2. Вызов awk
Возможны два основных варианта:
1)awk [-Fc] 'prog.awk' [files]
Это простейший случай, когда программа (заключенная в кавычки " ' ") находится в теле команды, "-Fc" - флаг, меняющий стандартный разделитель полей на "c" "file" - имя файла исходных данных, при его отсутствии - со стандартного входа. (Этот формат использован в начальных примерах).
cat f-awk | awk '/до/ {print}'
и
awk '/до/ {print}' < f-awk
дают результат, аналогичный
awk '/до/ {print}' f-awk
Для демонстрации действия флага "-Fc" рассмотрим вызовы:
awk '/до/ {print($2)}' f-awk awk -F0 '/до/ {print($2)}' f-awk На экран будет выведено:
С.К.
И.Х.
6
Первая команда "awk" выведет вторые поля (благодаря позиционной переменной "$2") строк, содержащие "до". (Кстати, позиционная переменная "$0" соответсвует всей строке). Во втором случае, благодаря флагу "-F" стандартные разделители заменены на символ "0", т.е. теперь выбранные строки воспринимаются, как разбитые на следующие поля:
Сидоров С.К. 1979 40
---------------------^--------------------
1-е поле 2-е поле (пусто) Хведоров И.Х. 1970 60
-----------------^---^--------------------
1-е поле 2-е 3-е поле (пусто)
2) awk [-Fc] -f prog.awk [files]
Флаг "-f" говорит о том, что awk-программу надо брать из файла, имя которого указано следом (имя может быть произвольным и расширение ".awk" добавлено здесь просто из эстетических соображений).
3. 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
|
|
|
|
|
|
Операции как в Си |
|
=, +=, -=, *=, /=, %=, +, /, %, ++, --. |
|
|
|
|
|
|
|
Сравнения чисел, если оба числа, иначе - строк |
|
<, <=, ==, !=, >=, > |
|
|
|
|
|
|
|
Логические операции |
|
!, ||, && |
|
|
|
|
|
|
|
Операция "пробел" |
|
конкатенация. |
|
|
|
|
|
|
4. Примеры awk-программ
1) awk '{print ($2, $3)}' f-awk
Результат:
И.И. 1980 А.В. 1979 С.К. 1979 И.Х. 1970
2) awk '/е/ {print ($2, $3)}' f-awk
Результат:
А.В. 1979 И.Х. 1970
3) awk '/е/ {print ($1, 2000 - $3)}' f-awk
Результат:
Петров 21 Хведоров 30
4) awk '{ s = s + $4}
END {print ("Суммарный возраст:" s) print ("Средний возраст:" s/NR)}' f-awk
Результат:
Суммарный возраст:190 Средний возраст:47.5 5) awk '{ s += $4 }
{print("NR="NR, "NF="NF)}
END {print ("FILENAME=" FILENAME)
print ("Значение позиционной переменной" $4 "\"пусто\" \ после окончания просмотра)")
print ("Суммарный возраст:" s)
print ("Средний возраст:" s/NR)}' f-awk
Результат:
NR=1 NF=4
NR=2 NF=4
NR=3 NF=4
NR=4 NF=4 FILENAME=f-awk
Значение позиционной переменной"пусто" (после окончания просмотра)
Суммарный возраст:190 Средний возраст:47.5
5. Селекторы
Здесь "селектор" следует понимать, как расширение понятия "шаблон", поскольку там где в структуре команды указан шаблон, в общем случае может стоять любой селектор.
Замечание. Открывающая скобка действия "{" должна быть в строке селектора.
В качестве селектора может быть:
1.выражение;
2.шаблон;
3.их комбинация. Соответствующие примеры:
1)$3 != $4 && $3 > 1970 $3 % 2 == 1
$1=="Иванов" - кавычки, чтобы воспринималось, как строка.
2)/ab/ отлично от /a b/, / ab/ и /ab /
Nполя ^шаблон - по совпадению Nполя !^шаблон - по несовпадению
Пример:
awk '$3~0 {print} ' < f-awk echo
awk '$3!~0 {print} ' < f-awk Иванов И.И. 1980 50 Хведоров И.Х. 1970 60 Петров А.В. 1979 40 Сидоров С.К. 1979 40
3) Шаблон может формировать множество образцов или указывать, в каком месте поля искать:
/^a/ |
поле начинается с "a" |
|
/a$/ |
поле кончается "a" |
|
\+ |
экранирует оператор |
|
[abc] |
любой из символов "a", "b" и "c" |
|
[a-р] |
любой символ диапазона |
|
* |
0 |
или больше вхождений регулярного выражения |
+ |
1 |
или больше вхождений регулярного выражения |
? |
0 |
или 1 вхождение регулярного выражения |
ab|cd |
"ab" или "cd" |
Примеры сочетаний:
awk ' $3~/(7[0-9])$/ {print} ' f-awk
Результат:
Петров А.В. 1979 40 Сидоров С.К. 1979 40 Хведоров И.Х. 1970 60
То есть в третьем поле выделить 70-е годы (7 и еще одна цифра от конца поля).
7. Действия
Вawk возможны следующие действия:
1.присваивания выражений;
2.операторы управления
3.операторы вывода;
4.встроенные функции.