(манипулирование файлами данных, выборка и обработка текста ) Преподаватель: Петриков Владимир Дмитриевич AWK (GAWK)

Презентация:



Advertisements
Похожие презентации
(манипулирование файлами данных, выборка и обработка текста ) Преподаватель: Петриков Владимир Дмитриевич AWK (GAWK) 2.
Advertisements

(манипулирование файлами данных, выборка и обработка текста ) Преподаватель: Петриков Владимир Дмитриевич AWK (GAWK) 3.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Лекция 2 Функции библиотек языка C. stdio.h Заголовочный файл стандартной библиотеки языка C. Содержит определения констант, объявления функций и типов.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Символы и строки. Процедуры и функции работы со строками.
ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ПАСКАЛЬ НАЧАЛА ПРОГРАММИРОВАНИЯ.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Понятие строки. Операции со строковыми величинами. Стандартные процедуры и функции обработки строковых величин. Простые алгоритмы работы со строками на.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Язык программирования Pascal. Программа это упорядоченный список команд, необходимых для решения некоторой задачи. Языком программирования называют систему.
Часть 1 Простейшая программа Программа на языке QBASIC состоит из последовательности инструкций – команд компилятору. Если в строке записано несколько.
Структурные типы данных 1.Массивы 2.Строки 3.Записи 4.Множества 5.Файлы.
Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы, причем символ подчеркивания рассматривается компилятором как.
Язык программирования QuickBASIC © Бакунович А.В., уч.г. СШ 3.
Существует три разновидности комментариев: комментарии в одной строке, комментарии в нескольких строках, комментарии для документирования. Комментарии,
Программирование
Транксрипт:

(манипулирование файлами данных, выборка и обработка текста ) Преподаватель: Петриков Владимир Дмитриевич AWK (GAWK)

Инструмент прикладного программиста: строковый процессор AWK The AWK Programming Language, авторы Aho, Weinberger и Kernighan известны, как родоначальники языка C и операционной системы UNIX. Gawk - это GNU реализация AWK mawk, … - новый AWK много реализаций - разные ОС: UNIX, WIN, MAC

ПРИМЕР 1 Разбор файлов задачного сервера Имеется Набор каталогов со сданными решениями и набор файлов с протоколами результатов Необходимы файлы – по именам студентов по номерам задач

Значительная обычная доля работы программиста - преобразовании текстовых файлов: выделении из них определенных частей, преобразовании одних строк в другие, дописывании какой-либо информации, простейшие вычисления с данными, извлекаемыми из этих файлов и т.д., и т.п. Трудоемкость - тысячи строк текста Неунифицируемость - информация не структурирована Для эффективной работы в этой ''серой'' области давно предложен и с успехом применяется строковый процессор awk.

ПРИМЕР 2 Преобразование Списка для разных задач.

Для своих действий awk предоставляет в распоряжение программиста развитый язык программирования, напоминающий популярный язык программирования C. Входной язык процессора awk является в определенном смысле ''упрощенным'' C, предоставляя удобный операционный синтаксис для строковых операций, автоматическое преобразование строка-число, автоматический лексический разбор входного потока и т.п. Почти C

Одна из самых замечательных особенностей Perl состоит в том, что он представляет собой семантическое надмножество (как минимум) языка awk. С практической точки зрения это значит, что если вы можете сделать что-либо в awk, вы сможете сделать это и в Perl. Бонус

Если программа короткая, проще всего включить ее в команду выполнения awk: Linux: awk 'program' input-file1 input-file2... WIN: gawk program input-file1 input-file2... Если программа длинная, обычно удобнее записать ее в файл : gawk -f program-file input-file1 input-file2... Запуск awk-программы нет input-file1ввод со стандартного устройства ввода ( win: клавиатура, CTRL-Z )

Технология выполнения заданий ОС: Windows Файловый менеджер: Total Commander Задание : в отдельном каталоге Zapusk.bat gawk -f p2.awk spisok.txt > new.txt Набор файлов: Запуск примера из командного окна текущего каталога: набрать в TotalCommander внизу - cmd Запуск: >zapusk Редактируем файл p2.awk

Файл - именованная последовательность логических записей, хранящихся на внешнем носителе. A B C E EOF Следующая запись (RECORD) Текущая позиция Предыдущая запись запись конца файла Запись - набор знаков, значений; читается или записывается целиком.

AWK рассматривает входной поток данных : это записи (строки), разделенные специальными символами ( RS - RecordSeparator ) - переход на новую строку ('\n'). Запись (строка) считается разделенной на поля специальными символами ( FS - FieldSeparator ) - по умолчанию - символ пробела Строка

Структура awk-файла Программа на языке awk состоит из пар: образец действие. (шаблон действие) Каждая запись проверяется встроенным механизмом awk на соответствие заданному образцу и если текущая запись соответствует этому образцу, выполняется действие., т.е. интерпретация входной информации идёт построчно см. Пример 3 - запуск из файла Программа …………. Входной Файл …………. выполняется много раз

шаблон { действие } шаблон{ действие } чего-то нет действие выполняется для каждой записи шаблон { print } вывод всей записи для каждого шаблона Сравним примеры 3 и 3а { if( $0 ~ /Иванов/ ) print $0 }/Иванов/

Общее в AWK допускается использование в -- Поля (см.выше) для входных записей -- Переменные (стандартные, Массивы) -- Арифметические выражения образец {действие}

Образец (шаблон) -- Регулярное выражение -- Выражение отношения -- Комбинация образцов -- BEGIN и END

Действие предложения, разделенные ; или \n (новая строка) Вывод (Печать) Присваивание Управляющая структура Встроенная функция

- начинаются с символа ``#'' и продолжаются до конца строки. Комментарии # Print list of word frequencies { for (i = 1; i

Поля строка ВВОДА состоит из полей строка: Первоеполе Второеполе ……… $0 $1 $2 …. $100 $101 Ссылается на всю строку целиком Запись (строка) считается разделенной на поля специальными символами (FS - FieldSeparator) - по умолчанию - символ пробела максимально Общее в awk

Поля Record: Первоеполе Второеполе ……… Последнееполе $0 $1 $2 …. Общее в awk NR – Number of Record номер строки NF – Number of Fields число полей gawk { print NR } new.txt gawk { print NR NF} new.txt !!! Вывод Без пробела: NRNF

Переменные x = 1 - число x = ab - строка y + abc - число умолчание = 0 = Общее в awk y abc - строка

Поля как переменные $1 = "3" + $2 меняем значение поля n = 5 $(n+1) вычисляемый номер поля Общее в awk используем значение поля

Массивы { x[1] = 1 x[3] = $0 } END{ print x[1] print x[3] } не объявляются используются элементы массива, «как переменные» индексация не числом, а полем (строкой) # подсчёт частоты слов { for (i = 1; i

Арифметические выражения Выражение Переменная (Число - Строка) Число Строка Встроенная функция Выражение (константы) + - * / % остаток Общее в awk x = число x = ab - строка константы строка Операция склейка строк z = ab cde

Образец (шаблон) -- Регулярное выражение -- Выражение отношения -- Комбинация образцов -- BEGIN и END

Регулярное выражение позволяет более точно описать класс строк, которые необходимо обработать или напечатать. Программа ( с пустым действием) /Иванов/ напечатает из текстового файла те строки, которые содержат подстроку "Иванов" ( в том числе и "Ивановский машиностроительный завод" ). см. Пример 3 шаблон

ИСТИНА и ЛОЖЬ в AWK из C ИСТИНА - любое число, отличное от 0 или любая непустая строка ЛОЖЬ – число 0 или пустая строка "0" – истина, т.к. строка не пустая

Выражение отношения ~ Содержится !~ Не содержится = > $0 ~ /Иванов/ $1 >= "s" n >= 5 s, t, u, v... шаблон в строке содержитсяИванов строки, начинающиеся с символа s или следующих за ним по порядку

Логические операции $0 ~ /Иванов/ || $0 ~ /Петров/n >= 5 && n

BEGIN и END BEGIN { } END { } Программа Входной файл выполняется 1 раз выполняется 1 раз выполняется много раз = количеству строк BEGIN { printf СТАРТ\n } /Иванов/ END { printf \nФИНИШ} шаблон

метасимволы (шаблоны) ^ $ [ ] - + *.(точка) \ ^ -- соответствует началу строки /^A/ - строки, начинающиеся на A $4 ~ /^Иванов/ $ -- соответствует концу строки. /A$/ отвечает строкам, заканчивающимся на A. $4 ~ /вна$/ шаблон Регулярное выражение /Иванов/ "^$" соответствует пустой строке.

[ ] -- множество единичных символов [AWK] соответствует множеству из трех букв A, W, K G[AWK] представляет множество строк { GA, GW, GK } - -- задаёт диапазон символов (нет переносимости POSIX!) [a-z] соответствует символам от a до z, {a b c d … y z} $4 ~ /^[А-С]/ шаблон

+ -- многократное ( не менее одного) повторение в образце символа, предшествующего + [1-9] целые числа, делящиеся на 100 { … …} * -- также многократное, но возможно также и нулевое повторение предыдущего символа. [1-9][0-9]* -- положительные целые числа. {1 2 … 10 …100 …} [1-9]00* -- целые числа, делящиеся на 10 {10 20 … …} ? -- однократное, но возможно также и нулевое повторение предыдущего символа. [1-9][0-9]? -- положительные целые числа до 99 {1 2 … 10 …99} шаблон

. (точка) -- произвольный единичный символ.* - обозначает произвольную комбинацию символов. "13." _ 13\n 13 \ -- отменяет специальное значение последующего символа. \$ - это символ $ \\ - это символ \ шаблон

Управляющие последовательности для символов ASCII с кодами \a 0x07 BEL Звуковой сигналBell \b 0x08 BS ЗабойBack Space \f 0x0C FF Перевод бланкаForm Feed \n 0x0A LF Новая строка (перевод строки) (new line) Line Feed \r 0x0D CR Возврат каретки Caridge Return \t 0x09 HT Табуляция (горизонтальная) \v 0x0B VT Вертикальная табуляция

\\ 0x5c \ Обратная наклонная черта \/ / Прямая наклонная черта \' 0x27 ' Одинарная кавычка (апостроф) \" 0x22 " Двойная кавычка \? 0x3F ? Вопросительный знак Символы, используемые в разных «шаблонах» printf("Hello Word !!! \n"); как напечатать \ ? \ddd строка до трех восьмеричных цифр ( ) \xdd строка шестнадцатеричных цифр (0 - FF) Универсальный способ

Действие предложения, разделенные ; или \n (новая строка) Вывод (Печать) Присваивание n = 1 Управляющая структура Встроенная функция

действие Вывод (Печать) print - выводится вся запись + \n print $0 print $1, $2 - значения полей выводятся через пробел print $1 abc - выводится конкатенация значений полей print – выводится пустая строка формат вывода – по умолчанию

действие форматированный вывод printf format, item1, item2,... функция sprintf (format, item1, item2,...)

Управляющие операторы if (условие) оператор [ else оператор] while (условие) оператор do оператор while (условие) for (выражение1; выражение2; выражение3) оператор for (переменная in массив) оператор break continue delete массив[индекс] delete массив exit [ выражение ] { операторы } действие

if (если) if( условие ) действие if( условие ) действие else действие Анализ условия на истинность, == 0 if (x % 2 == 0) print "x is even" else print "x is odd" действие

while (пока) while (условие ) действие выполнение действия пока значение условия != 0 проверка перед каждым выполнением { i = 1 while( i

do (делай ) do действие while ( условие ) { i = 1 do { print $0 i++ } while (i

for (для) for ( инициализация ; условие ; приращение) действие for (i = 1; i

for (для) for (переменная in массив) действие # Пишем 1 для каждого встречного слова { for (i = 1; i 10) { num = num +1 } print num, "words longer than 10 characters" } действие

break (прерывание) – «досрочный» выход из цикла break continue (продолжение) – новая итерация - выполнение нового цикла continue - для do, while, for действие

Встроенные функции Математические функции exp() – экспонента log() - натуральный логарифм sqrt() - квадратный корень int() - целая часть числа действие

length(arg) - Функция длины arg. length - длина текущей строки substr(s, m, n) - Возвращает подстроку строки s, начиная с позиции m, всего n символов. index(s, t) - Возвращает начальную позицию подстроки t в строке s. (Или 0, если t в s не содержится.) Строковые функции действие

sprintf(fmt,exp1,exp2,...) - форматированная печать (вывод) в строку, идентично PRINTF split(s, array, sep) - Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep, то при анализе строки он понимается как разделитель. действие