AWK (GAWK) презентация

Содержание

Инструмент прикладного программиста: строковый процессор AWK The AWK Programming Language, авторы Aho, Weinberger и Kernighan

Слайд 1 (манипулирование файлами данных, выборка и обработка текста )
Преподаватель:

Петриков Владимир Дмитриевич

AWK (GAWK)


Слайд 2Инструмент прикладного программиста: строковый процессор AWK
The AWK Programming Language,

авторы Aho, Weinberger и Kernighan

известны, как родоначальники языка C
и операционной системы UNIX.

Gawk - это GNU реализация AWK
mawk, … - новый AWK

много реализаций - разные ОС: UNIX, WIN, MAC


Слайд 3ПРИМЕР 1

Разбор файлов задачного сервера
2006 -2008.

Имеется Набор каталогов со

сданными решениями и набор файлов с протоколами результатов

Необходимы файлы – по именам студентов
по номерам задач


Слайд 4Значительная обычная доля работы программиста - преобразовании текстовых файлов:
выделении из

них определенных частей, преобразовании одних строк в другие,
дописывании какой-либо информации,
простейшие вычисления с данными, извлекаемыми из этих файлов
и т.д., и т.п.

Трудоемкость - тысячи строк текста
Неунифицируемость - информация не
структурирована

Для эффективной работы в этой ''серой'' области давно предложен и с успехом применяется строковый процессор awk.

Слайд 5ПРИМЕР 2

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


Слайд 6Для своих действий awk предоставляет в распоряжение программиста развитый язык программирования,

напоминающий популярный язык программирования C.

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

Почти C


Слайд 7Одна из самых замечательных особенностей Perl состоит в том, что он

представляет собой семантическое надмножество (как минимум) языка awk.

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

Бонус


Слайд 8Если программа короткая, проще всего включить ее в команду выполнения 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 )



Слайд 9Технология выполнения заданий
ОС: Windows
Файловый менеджер: Total Commander
Задание :

в отдельном каталоге

Zapusk.bat gawk -f p2.awk spisok.txt > new.txt

Набор файлов:

Запуск примера из командного окна текущего каталога:
набрать в TotalCommander внизу - cmd
Запуск: >zapusk

Редактируем файл p2.awk


Слайд 10Файл
- именованная последовательность логических записей, хранящихся на внешнем носителе.
Следующая запись

(RECORD)

Текущая позиция

Предыдущая запись

запись конца файла

Запись - набор знаков, значений; читается или записывается целиком.


Слайд 11AWK рассматривает входной поток данных :

это записи (строки), разделенные специальными
символами (RS - RecordSeparator) - переход на новую строку ('\n').

Запись (строка) считается разделенной
на поля специальными символами (FS - FieldSeparator)
- по умолчанию - символ пробела

Строка <= 256 символов.

Работа awk

$0

пробел

\n


Слайд 12Структура awk-файла
Программа на языке awk состоит из пар:

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

см. Пример 3 - запуск из файла

Программа

………….
Входной
Файл
………….


выполняется
много раз



Слайд 13шаблон      { действие }
шаблон
{ действие }
чего-то нет
действие выполняется
для каждой

записи

шаблон { print }

вывод всей записи для каждого шаблона

Сравним примеры 3 и 3а

{ if( $0 ~ /Иванов/ ) print $0 }

/Иванов/


Слайд 14Общее в AWK
допускается использование в

-- Поля (см.выше) для входных

записей

-- Переменные (стандартные, Массивы)

-- Арифметические выражения

образец     {действие}


Слайд 15Образец (шаблон)
-- Регулярное выражение

-- Выражение отношения

-- Комбинация образцов

--

BEGIN и END

Слайд 16Действие
предложения, разделенные ;

или \n (новая строка)


Вывод (Печать)

Присваивание

Управляющая структура

Встроенная функция


Слайд 18- начинаются с символа ``#''
и продолжаются до конца строки.


Комментарии

# Print list of word frequencies
{
for (i = 1; i <= NF; i++)
freq[$i]++ # массив слов
}

END {
for (word in freq)
printf "%s\t%d\n", word, freq[word]
}

pr4
pr4a

Общее в awk


Слайд 19Поля
строка ВВОДА состоит из полей
строка: Первоеполе Второеполе

………
$0 $1 $2 …. $100 $101

Ссылается на всю строку целиком

Запись (строка) считается разделенной на поля специальными символами (FS - FieldSeparator) - по умолчанию - символ пробела

максимально

Общее в awk


Слайд 20Поля
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


Слайд 21Переменные
x = 1 - число
x =

“ab” - строка

y + “abc” - число

умолчание

= 0

= “”

Общее в awk

y “abc” - строка


Слайд 22Поля как переменные
$1 = "3" + $2
меняем значение поля
n

= 5
$(n+1)

вычисляемый номер поля

Общее в awk

используем значение поля


Слайд 23Массивы
{
x[1] = 1
x[3] = $0
}
END{

print x[1]
print x[3]
}

не объявляются

используются элементы массива, «как переменные»

индексация не числом, а полем (строкой)

# подсчёт частоты слов
{
for (i = 1; i <= NF; i++)
freq[$i] = freq[$i] +1 # массив «слов»
}

Общее в awk


Слайд 24Арифметические выражения
Выражение < Операция> Выражение
Переменная (Число - Строка)
Число
Строка
Встроенная функция


Выражение

(константы)

+ - * / % остаток

Общее в awk

x = 1.2 - число

x = “ab” - строка

константы

строка строка

Операция склейка строк

z = “ab” “cde”

z = “abcde”


Слайд 26Образец (шаблон)
-- Регулярное выражение

-- Выражение отношения

-- Комбинация образцов

--

BEGIN и END

Слайд 27Регулярное выражение
позволяет более точно описать класс строк, которые необходимо обработать или

напечатать.

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

см. Пример 3

шаблон


Слайд 28ИСТИНА и ЛОЖЬ в AWK
из C
ИСТИНА - любое число, отличное от

0
или любая непустая строка

ЛОЖЬ – число 0
или пустая строка “”

"0" – истина , т.к. строка не пустая



Слайд 29Выражение отношения
< Выражение> < Принадлежность> < Выражение>
< Выражение>

Лог. Операция> < Выражение>

~ Содержится
!~ Не содержится

< <= == != >= >

$0 ~ /Иванов/

$1 >= "s"

n >= 5

s, t, u, v...

шаблон

в строке содержится “Иванов”

строки, начинающиеся с символа s или следующих за ним по порядку


Слайд 30Логические операции
< Выражение> < Лог. Операция> < Выражение>
$0

~ /Иванов/ || $0 ~ /Петров/

n >= 5 && n<10

n = 5, 6, 7, 8, 9

шаблон

в строке содержится “Иванов” или “Петров”

&& Логическое И

|| Логическое ИЛИ

! Логическое НЕ (отрицание)


Слайд 31BEGIN и END
BEGIN { }
END { }
Программа
Входной
файл

выполняется
1 раз
выполняется

1 раз

выполняется
много раз =
количеству
строк




BEGIN { printf “СТАРТ\n” }
/Иванов/
END { printf “\nФИНИШ”}

шаблон


Слайд 32метасимволы (шаблоны)
^ $ [ ] -

+ * .(точка) \

^ -- соответствует началу строки
/^A/ - строки, начинающиеся на A
$4 ~ /^Иванов/

$ -- соответствует концу строки.
/A$/ отвечает строкам, заканчивающимся на A.
$4 ~ /вна$/

шаблон

Регулярное выражение

/Иванов/

"^$" соответствует пустой строке.


Слайд 33
[ ] -- множество единичных символов

[AWK] соответствует множеству из трех букв A, W, K
G[AWK] представляет множество строк { GA, GW, GK }

- -- задаёт диапазон символов (нет переносимости POSIX!)
[a-z] соответствует символам от a до z, {a b c d … y z}
$4 ~ /^[А-С]/

шаблон


Слайд 34+ -- многократное ( не менее одного) повторение

в образце символа, предшествующего +

[1-9]00+ -- целые числа, делящиеся на 100
{100 200 …900 1000 …}

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

? -- однократное, но возможно также
и нулевое повторение предыдущего символа.

[1-9][0-9]? -- положительные целые числа до 99
{1 2 … 10 …99}

шаблон


Слайд 35
.(точка) -- произвольный единичный символ

.* - обозначает произвольную
комбинацию символов.
"13." - 131 133 134 13_ 13\n 13

\ -- отменяет специальное значение
последующего символа.
\$ - это символ $
\\ - это символ \


шаблон


Слайд 36Управляющие последовательности
для символов ASCII с кодами 0 - 31

\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 Вертикальная табуляция


Слайд 37 \\ 0x5c \ Обратная наклонная

черта
\/ / Прямая наклонная черта
\' 0x27 ' Одинарная кавычка (апостроф)
\" 0x22 " Двойная кавычка
\? 0x3F ? Вопросительный знак

Символы, используемые в разных «шаблонах»

printf("Hello Word !!! \n");


как напечатать \ “ ?

\ddd строка до трех восьмеричных цифр (0 - 377)
\xdd строка шестнадцатеричных цифр (0 - FF)

Универсальный способ


Слайд 39Действие
предложения, разделенные ;

или \n (новая строка)


Вывод (Печать)

Присваивание n = 1

Управляющая структура

Встроенная функция


Слайд 40действие
Вывод (Печать)
print - выводится

вся запись + \n print $0

print $1, $2 - значения полей выводятся через пробел

print $1 “abc” - выводится конкатенация значений полей

print “” – выводится пустая строка

формат вывода – по умолчанию


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

item2, ...)

Слайд 42Управляющие операторы
if (условие) оператор [ else оператор]

while (условие) оператор

do

оператор while (условие)

for (выражение1; выражение2; выражение3) оператор

for (переменная in массив) оператор

break
continue
delete массив[индекс]
delete массив
exit [ выражение ]
{ операторы }

действие


Слайд 43if (если)
if( условие ) действие
if( условие ) действие else

действие

Анализ условия на истинность, == 0

if (x % 2 == 0)
print "x is even"
else
print "x is odd"

действие


Слайд 44while (пока)
while (условие ) действие
выполнение действия пока значение условия

!= 0
проверка перед каждым выполнением

{
i = 1
while( i <= 3) {
print $i
i=i+1
}
}

действие


Слайд 45do (делай )
do действие while ( условие )
{

i = 1
do {
print $0
i++
} while (i <= 10)
}

действие


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

<= 100; i = i + 2)
print i

инициализация задает инициализацию цикла
while (условие) проверка перед каждой итерацией
{
действие
приращение часть итерации
}

действие


Слайд 47for (для)
for (переменная in массив) действие
# Пишем 1 для каждого

встречного слова
{
for (i = 1; i <= NF; i++)
used[$i] = 1
}

# Ищем количество разных слов длиннее 10 знаков
END {
for (x in used)
if (length(x) > 10) {
num = num +1
}
print num, "words longer than 10 characters"
}

действие


Слайд 48break (прерывание) – «досрочный» выход из цикла
break
continue (продолжение) –

новая итерация - выполнение нового цикла

continue

- для do, while, for

действие


Слайд 49Встроенные функции
Математические функции

exp() – экспонента

log() - натуральный логарифм

sqrt() - квадратный корень

int()

- целая часть числа

действие


Слайд 50length(arg) - Функция длины arg.

length - длина текущей строки


substr(s, m, n) - Возвращает подстроку строки s,
начиная с позиции m, всего n символов.

index(s, t) - Возвращает начальную позицию
подстроки t в строке s.
(Или 0, если t в s не содержится.)

Строковые функции

действие


Слайд 51sprintf(fmt,exp1,exp2,...) - форматированная печать

(вывод) в строку, идентично PRINTF

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

действие


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика