1 Wyrażenia regularne i język AWK(c) Jerzy Nawrocki TPI, Wykład 6 Teoretyczne podstawy informatyki Wykład 6 Wyrażenia regularne i język AWK Copyright, 2003 © Jerzy R. Nawrocki Wyrażenia regularne i język AWK
2 J.Nawrocki, Wyrażenia regularne i AWKPlan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK J.Nawrocki, Wyrażenia regularne i AWK
3 Problem konwersji plikówWprowadzenie Problem konwersji plików FName:Jurek SName:Busz Salary 585 FName:Alek SName:Gor Salary 700 FName SName Salary Jurek Busz Alek Gor J.Nawrocki, Wyrażenia regularne i AWK
4 Problem konwersji plikówWprowadzenie Problem konwersji plików #include
5 Problem konwersji plikówWprowadzenie Problem konwersji plików Rozwiązanie w AWK BEGIN {FS=":| ";} NR == 1 {print $1, "\t", $3, "\t", $5;} {gsub(/,/, ".” , $6); print $2, "\t", $4, "\t", $6;} J.Nawrocki, Wyrażenia regularne i AWK
6 J.Nawrocki, Wyrażenia regularne i AWKWprowadzenie Powstanie języka AWK: Aho, Weinberger, Kernighan Bell Labs, New Jersey (USA), 1977 Platformy: Unix, MS DOS/Windows Podobieństwo do C J.Nawrocki, Wyrażenia regularne i AWK
7 J.Nawrocki, Wyrażenia regularne i AWKIdea języka AWK Plik wejściowy Pole Wiersz Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Pola: $1, $2, $3, ... J.Nawrocki, Wyrażenia regularne i AWK
8 J.Nawrocki, Wyrażenia regularne i AWKIdea języka AWK Schemat programu w AWK Reguła przetwarzania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} J.Nawrocki, Wyrażenia regularne i AWK
9 J.Nawrocki, Wyrażenia regularne i AWKIdea języka AWK Zasada działania Jerzy Nawrocki Jan Kowalski Adam Malinowski wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} J.Nawrocki, Wyrażenia regularne i AWK
10 J.Nawrocki, Wyrażenia regularne i AWKNajprostsze programy Ile pól na wyjściu? Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 $4==”I1” { print $2, $1; } J.Nawrocki, Wyrażenia regularne i AWK
11 J.Nawrocki, Wyrażenia regularne i AWKNajprostsze programy Ile pól na wyjściu? Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 $4==”I1” J.Nawrocki, Wyrażenia regularne i AWK
12 J.Nawrocki, Wyrażenia regularne i AWKNajprostsze programy Jakie pole najpierw? Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 { print $2, $1; } J.Nawrocki, Wyrażenia regularne i AWK
13 J.Nawrocki, Wyrażenia regularne i AWKNajprostsze programy Jak zrobić tabelę? Nawrocki Jerzy Kowalski Jan Malinowski Adam Nawrocki Jerzy Kowalski Jan Malinowski Adam J.Nawrocki, Wyrażenia regularne i AWK
14 J.Nawrocki, Wyrażenia regularne i AWKNajprostsze programy Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Komentarz # Nazwiska studentow { printf("%-15s %-9s\n", $2, $1); } J.Nawrocki, Wyrażenia regularne i AWK
15 J.Nawrocki, Wyrażenia regularne i AWKWzorce wiersza Początek i koniec tekstu Relacje Wzorce złożone Wzorce zakresu Wyrażenia regularne J.Nawrocki, Wyrażenia regularne i AWK
16 Początek i koniec tekstuJerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 BEGIN { print ”-----”; } $4==”I2” { print $2, $1; } END { print ”*****”; } J.Nawrocki, Wyrażenia regularne i AWK
17 J.Nawrocki, Wyrażenia regularne i AWKRelacje dwa 11 $1 > $2 J.Nawrocki, Wyrażenia regularne i AWK
18 J.Nawrocki, Wyrażenia regularne i AWKWzorce złożone || lub (alternatywa) $1==1 || $2==1 && i (koniunkcja) $1==1 && $2==1 ! nie (zaprzeczenie) ! $1==1 J.Nawrocki, Wyrażenia regularne i AWK
19 J.Nawrocki, Wyrażenia regularne i AWKWzorce złożone Jerzy Adam I1 Adam Kowalski I2 Adam Malinowski I1 $4==”I1” && $1==”Adam” { print $2, $1; } J.Nawrocki, Wyrażenia regularne i AWK
20 J.Nawrocki, Wyrażenia regularne i AWKWzorce zakresu Wzorzec1 , Wzorzec2 J.Nawrocki, Wyrażenia regularne i AWK
21 J.Nawrocki, Wyrażenia regularne i AWKWzorce zakresu Jerzy Adamski I1 Adam Kowalski I2 Adas Malinowski I1 /Adam/ , /I2/ J.Nawrocki, Wyrażenia regularne i AWK
22 J.Nawrocki, Wyrażenia regularne i AWKWyrażenie regularne: wzorzec opisujący zbiór ciągów znaków Wyrażenie regularne: 1+ Zbiór ciągów: {1, 11, 111, 1111, .. } J.Nawrocki, Wyrażenia regularne i AWK
23 Wzorce z wyrażeniami regularnymiWyrażenia regularne Wzorce z wyrażeniami regularnymi Ciąg znaków Zbiór ciągów znaków wyrażenie ~ /wyrażenie_regularne/ $1 ~ /1/ J.Nawrocki, Wyrażenia regularne i AWK
24 J.Nawrocki, Wyrażenia regularne i AWKZagadka Prawda kole W aureolę. J.Sztaudynger $1 ~ /a/ J.Nawrocki, Wyrażenia regularne i AWK
25 Wzorce z wyrażeniami regularnymiWyrażenia regularne Wzorce z wyrażeniami regularnymi Ciąg znaków Zbiór ciągów znaków wyrażenie !~ /wyrażenie_regularne/ $1 !~ /1/ J.Nawrocki, Wyrażenia regularne i AWK
26 J.Nawrocki, Wyrażenia regularne i AWKZagadka Prawda kole W aureolę. J.Sztaudynger $1 !~ /a/ J.Nawrocki, Wyrażenia regularne i AWK
27 Wzorce z wyrażeniami regularnymiWyrażenia regularne Wzorce z wyrażeniami regularnymi A gdzie jest ciąg znaków? Zbiór ciągów znaków /wyrażenie_regularne/ /1/ $0 ~ /1/ = J.Nawrocki, Wyrażenia regularne i AWK
28 J.Nawrocki, Wyrażenia regularne i AWKZagadka - Módl się i pracuj - Radzą przyjacioły, To się inni obłowią, a Ty będziesz goły. Co robi ten program? /z/ J.Nawrocki, Wyrażenia regularne i AWK
29 J.Nawrocki, Wyrażenia regularne i AWKZnaki specjalne ^ początek $ koniec dowolny znak [ ] zbiór znaków \n nowa linia \ kropka \” znak cudzysłowu \ddd znak o kodzie oktalnym ddd J.Nawrocki, Wyrażenia regularne i AWK
30 J.Nawrocki, Wyrażenia regularne i AWKZnaki specjalne Co robi ten program? /^n$/ /^.$/ /[ ]/ /[0-9]/ J.Nawrocki, Wyrażenia regularne i AWK
31 Dopełnienie zbioru znakówWyrażenia regularne Dopełnienie zbioru znaków [^ ... ] /[^0-9]/ /^[0-9]/ ! /[0-9]/ J.Nawrocki, Wyrażenia regularne i AWK
32 J.Nawrocki, Wyrażenia regularne i AWKZagadka Jabłek nie jadam. Zmądrzałem. Adam /am/ J.Nawrocki, Wyrażenia regularne i AWK
33 J.Nawrocki, Wyrażenia regularne i AWKZagadka Ząbki listka Nic tak nie potrafi gryźć Jak cudzy laurowy liść. /fi | ki/ J.Nawrocki, Wyrażenia regularne i AWK
34 J.Nawrocki, Wyrażenia regularne i AWKPodstawowe operatory Konkatenacja /Adam/ Alternatywa /Adam | Jurek/ [0-9] [0-9][0-9] [0-9][0-9][0-9] . . . 3 34 340 . . . Domknięcie zwrotne /[0-9][0-9]*/ J.Nawrocki, Wyrażenia regularne i AWK
35 J.Nawrocki, Wyrażenia regularne i AWKZagadka Nadgodziny 2001/02 ================ Nawrocki 60 Complak 359 $2 ~ /^[0-9][0-9]*$/ J.Nawrocki, Wyrażenia regularne i AWK
36 J.Nawrocki, Wyrażenia regularne i AWKPozostałe elementy Nawiasy () /[0-7][0-7]*(Q|O)/ Domknięcie dodatnie + /[0-7]+ (Q|O)/ Opcjonalność ? /[0-9]+ (D|d)?/ J.Nawrocki, Wyrażenia regularne i AWK
37 J.Nawrocki, Wyrażenia regularne i AWKZmienne Zmienne wprowadzone przez programistę (typ: ciąg znaków; wartość początkowa: ciąg pusty / zero) Zmienne wbudowane (mają standardowe znaczenie) Zmienne polowe $1, $(i+j-1), .. J.Nawrocki, Wyrażenia regularne i AWK
38 J.Nawrocki, Wyrażenia regularne i AWKZmienne NF - liczba pól w wierszu NR - numer wiersza FILENAME - nazwa pliku {total= total + NF;} END {print "File:", FILENAME; print "Num. of fields:", total; print "Lines:", NR;} J.Nawrocki, Wyrażenia regularne i AWK
39 Zawansowane mechanizmy AWKFunkcje wbudowane (gsub, ..) Instrukcje złożone (if, while, ..) Tablice dynamiczne Funkcje getline i next Operatory przekierowania J.Nawrocki, Wyrażenia regularne i AWK
40 Zawansowane mechanizmy AWKJerzy Nawrocki 20 Wojciech Complak 59 Jerzy Nawrocki 40 Wojciech Complak 300 {zl[$2]= zl[$2] + $3;} END {for (i in zl) print i, zl[i];} Nawrocki 60 Complak 359 J.Nawrocki, Wyrażenia regularne i AWK
41 J.Nawrocki, Wyrażenia regularne i AWKPodsumowanie Wreszcie! gawk -f prog.awk
42 J.Nawrocki, Wyrażenia regularne i AWKLiteratura A. Aho, B. Kernighan, P. Weinberger, The AWK Programming Language, Addison-Wesley, Reading, 1988. J. Nawrocki, W. Complak, Wprowadzenie do przetwarzania tekstów w języku AWK, Pro Dialog 2 (1994), J.Nawrocki, Wyrażenia regularne i AWK