- •Программирование вывода текста 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 выбирается каждое слово из входной строки и заполняется
- •Для удаления некоторого элемента из
Программирование вывода текста awk
Программа awk выполняет работу по обработке файлов, содержащих тексты и
числовые данные, и позволяет
перераспределять файлы, выполнять арифметические операции и выборочно восстанавливать строки, используя программные операторы, аналогичные операторам языка Си.
Эту команду можно использовать для сопоставления с образцами или использовать как генератор отчетов для
файлов, существующих в системе. |
1 |
Внимание. В awk могут быть проблемы с русской буквой я/Я.
Логика действия:
-сопоставление с шаблоном;
-преобразование текста.
Шаблоны задаются:
-в командной строке;
-в файле (в этом случае необходимо использовать опцию -f).
2
Полная командная строка для awk
состоит из четырех частей:
-имени команды
-[опция -Fсимвол] [опция -f];
-необязательного оператора-шаблона, если присутствует оператор-действие.
-необязательного оператора-действия, если присутствует оператор-шаблон;
-имени или имен файлов.
В awk символ # обозначает начало |
|
комментария. |
3 |
Оператор-шаблон используется для выбора строк из файла,
а оператор-действие - для работы над этими строками.
Оператор-шаблон должен предшествовать оператору-действию,
который должен быть заключен в фигурные скобки как показано ниже:
awk 'pattern_stateman {action_stateman}' file(s)
4
Внимание! Нельзя одновременно опускать и шаблон и действие.
Если не задан оператор-шаблон, то
оператор-действие выполняется над каждой строкой файла или стандартного
ввода.
Если не задан оператор-действие, то строка просто копируется на стандартный
вывод.
Если не заданы имена файлов или стоит |
|
знак "-", то используется стандартный |
|
ввод. |
5 |
|
Если оператор-шаблон и/или оператор действия задаются в командной строке, то они заключаются в одинарные кавычки с
той целью, чтобы интерпретатор shell их не интерпретировал.
Ввод делится на записи, разделенные
специальным символом, по умолчанию это
"CR" (возврат каретки).
То есть в awk обработка производится построчно. Разделитель можно поменять,
переопределив встроенную переменную RS. 6
Записи делятся на поля, разделенные
специальным символом (обычно это “Пробел”).
Его можно переопределить:
-используя встроенную переменную FS;
-указав в опции –Fсимвол.
Внимание!
Если разделитель “Пробел”, то он не учитывается в начале строки.
Если разделитель “неПробел”, то в
начале строки учитываются эти разделители. 7
В awk не существует оператора read. awk автоматически получает каждую запись.
Каждая исходная строка сопоставляется с каждым шаблоном. В случае успеха выполняется заданные действия.
После сопоставления со всеми шаблонами вводится следующая строка и процесс повторяется.
Строки, которые не удалось сопоставить ни с одним из шаблонов, игнорируются.
8
1. Обращение к полям
Как и команда sort, команда awk
ориентирована на работу с полями и реализует простой метод обращения к полям по имени.
Чтобы обратиться к полю, необходимо перед его номером поставить знак доллара.
Поэтому поле 1 имеет имя $1, поле 2 - $2 и т.д.
Запись $0 обозначает все поля, то есть всю строку.
9
Последнее поле обозначается через $NF, где NF - встроенная переменная,
значение которой устанавливается равным числу полей.
Необходимо делать различие между NF-
числом полей и $NF- последним полем строки.
Причем, в команде awk только номера полей начинаются со знака доллара ($), а переменные не имеют такого префикса.
10