1 / 35

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

AWK (GAWK) 2. (манипулирование файлами данных, выборка и обработка текста ). Преподаватель: Петриков Владимир Дмитриевич. Регулярное выражение. / Иванов /. метасимволы (шаблоны). шаблон. ^ $ [ ] - + * .(точка) . ^ -- соответствует началу строки

kadeem
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. + -- предыдущий символ присутствует в образце многократно ( не менее одного раза) [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 раз [1-9][0-9]* -- положительные целые числа до 99 {1 2 … 10 …99} шаблон

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

  6. Управляющие последовательности для символов 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 Вертикальная табуляция

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

  8. Классы символов POSIX - для разных стран! • [:alnum:] -- алфавитные символы и цифры = [A-Za-z0-9] для USA • [:alpha:] -- символы алфавита = [A-Za-z] • [:blank:] -- символы пробела и табуляции • [:cntrl:] -- управляющие символы (control characters). • [:punct:] -- символы пунктуации • [:digit:] -- символы десятичных цифр = [0-9] • [:xdigit:] -- символы шестнадцатиричных цифр = [0-9A-Fa-f] • [:graph:] (печатаемые и псевдографические (видимые) символы) – • без пробела. • [:print:] (печатаемые символы) + символ пробела • [:space:] -- пробельные символы (такие как пробел и TAB, FF) • [:lower:] -- алфавитные символы в нижнем регистре = [a-z] • [:upper:] -- символы алфавита в верхнем регистре = [A-Z] символьные классы POSIX ------ /[класс]/ в двойные квадратные скобки/[[:alnum:]]/

  9. Область шаблона pat1 , pat2 {...} /Canada/ , /Brazil/ China 3692 866 Asia Canada 3852 24 North America USA 3615 219 North America Brazil 3286 116 South America от до

  10. BEGIN и END выполняется 1 раз BEGIN Входной файл выполняется много раз Программа END выполняется 1 раз BEGIN { printf “СТАРТ\n” } /Иванов/ END { printf “\nФИНИШ”}'

  11. BEGIN { printf "СТАРТ\n\n"} /Иванов/ {n = n+1} END { printf " %d \n", n printf "\n\nФИНИШ"} подсчет строк с /Иванов/ BEGIN { printf "СТАРТ\n\n” } BEGIN { printf "СТАРТ\n\n” } WIN

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

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

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

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

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

  17. while (пока) действие while (условие ) действие выполнение действия пока значение условия !=0 проверка перед каждым выполнением { i = 1 while(i <= 3){ print $i i=i+1 } }

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

  19. for (для) действие for (инициализация; условие; приращение) действие for (i = 1; i <= 100; i = i + 2) print i инициализациязадает инициализацию цикла while (условие) проверка перед каждой итерацией { действие приращениечасть итерации }

  20. for (для) действие 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" }

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

  22. Типы переменных и их преобразование Переменные - числа с плавающей запятой строки или и то, и другое одновременно Тип переменной зависит от контекста. В числовых выражениях переменная - число, в строковых - строка. a = 12 b = a "" print a, b print a + b b= a "stroka" print a, b print a + b b= "stroka"a # b=0 print a, b print a + b целые значения всегда преобразуются как целые 12 12 24 12 12stroka 24 12 stroka12 12 По умолчанию число = 0 строка = "" (пустая строка). pr6.bat

  23. Операции = простое присваивание (переменная = значение) x = y = z = 5как в Си арифметические +сложение - вычитание *умножение /деление - для вещественных чисел % модуль (остаток при целочисленном делении) ^ возведение в степень ( ** ) -x унарный минус, отрицание +x унарный плюс; выражение преобразуется в число

  24. ++инкремент n++ - n = n+1 -- декремент n-- - n = n-1 могут быть префиксными и постфиксными сложные виды присваивания (операция и присваивание) += увеличить на -= *= /= %= ^= возведение в степень и присваивание

  25. Условная Операция берём положительное значение x

  26. Побочные эффекты b = 6 print b += b++ или b = 6 b += ++b + b++ print b не надо так писать!!!

  27. Встроенные арифметические функции Если srand() не имеет аргументов, то начальное значение производится из времени дня.

  28. Встроенные строковые функции awk

  29. Строковые функции 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, то при анализе строки он понимается как разделитель.

  30. Встроенные строковые функции awk

  31. Встроенные строковые функции awk

  32. Встроенные строковые функции awk asort(source [, dest]) - сортировка a["last"] = "de" a["first"] = "sac" a["middle"] = "cul" a["last"] = "de" a["first"] = "sac" a["middle"] = "cul" n = asort( a , b )

More Related