Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałEdyta Rogalewski Został zmieniony 9 lat temu
1
Przetwarzanie tekstów i AWK Copyright, 2007 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 5 Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/wdi/
2
J.Nawrocki, Przetwarzanie tekstów i AWK Wprowadzenie Problem konwersji plików FName:Jurek SName:Busz Salary 585 FName:Alek SName:Gor Salary 700 FName SName Salary Jurek Busz 585 Alek Gor 700
3
J.Nawrocki, Przetwarzanie tekstów i AWK Wprowadzenie Problem konwersji plików #include FILE *fin; char token[200]; char gettoken(void) {int i=0; char c; do {c = getc(fin); if (c == EOF) return (EOF); } while (c < ‘!’); #include FILE *fin; char token[200]; char gettoken(void) {int i=0; char c; do {c = getc(fin); if (c == EOF) return (EOF); } while (c < ‘!’); Rozwiązanie w C: 40 linii kodu
4
J.Nawrocki, Przetwarzanie tekstów i AWK Wprowadzenie Problem konwersji plików BEGIN {FS=":| ";} NR == 1 {print $1, "\t", $3, "\t", $5;} {gsub(/,/, ".”, $6); print $2, "\t", $4, "\t", $6;} BEGIN {FS=":| ";} NR == 1 {print $1, "\t", $3, "\t", $5;} {gsub(/,/, ".”, $6); print $2, "\t", $4, "\t", $6;} Rozwiązanie w AWK
5
J.Nawrocki, Przetwarzanie tekstów i AWK Wprowadzenie Powstanie języka AWK: Aho, Weinberger, Kernighan Bell Labs, New Jersey (USA), 1977 Platformy: Unix, MS DOS/Windows Podobieństwo do C
6
J.Nawrocki, Przetwarzanie tekstów i AWK Idea języka AWK Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 Pole Wiersz Pola: $1, $2, $3,... Plik wejściowy
7
J.Nawrocki, Przetwarzanie tekstów i AWK Idea języka AWK Schemat programu w AWK wzorzec1 {instrukcje1} wzorzec2 {instrukcje2}...... wzorzec1 {instrukcje1} wzorzec2 {instrukcje2}...... Reguła przetwarzania
8
J.Nawrocki, Przetwarzanie tekstów i AWK Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2}...... wzorzec1 {instrukcje1} wzorzec2 {instrukcje2}...... Jerzy Nawrocki Jan Kowalski Adam Malinowski $0 oznacza bieżący wiersz
9
J.Nawrocki, Przetwarzanie tekstów i AWK $4==”I1” { print $2, $1; } Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 Ile pól na wyjściu? Najprostsze programy
10
J.Nawrocki, Przetwarzanie tekstów i AWK Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 $4==”I1”$4==”I1” Ile pól na wyjściu? Najprostsze programy
11
J.Nawrocki, Przetwarzanie tekstów i AWK { print $2, $1; } { print $2, $1; } Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 Jakie pole najpierw? Najprostsze programy
12
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce wiersza Początek i koniec tekstu Relacje Wzorce złożone Wzorce zakresu Wyrażenia regularne
13
J.Nawrocki, Przetwarzanie tekstów i AWK BEGIN { print ”-----”; } $4==”I2” { print $2, $1; } END { print ”*****”; } BEGIN { print ”-----”; } $4==”I2” { print $2, $1; } END { print ”*****”; } Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 Początek i koniec tekstu
14
J.Nawrocki, Przetwarzanie tekstów i AWK END { print ”*****”; } $4==”I2” { print $2, $1; } BEGIN { print ”-----”; } END { print ”*****”; } $4==”I2” { print $2, $1; } BEGIN { print ”-----”; } Jerzy Nawrocki 43089 I1 Jan Kowalski 43780 I2 Adam Malinowski 43990 I1 Początek i koniec tekstu
15
J.Nawrocki, Przetwarzanie tekstów i AWK $1 > $2 12 11 2 11 2 11 Relacje
16
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce złożone || lub (alternatywa) $1==1 || $2==1 && i (koniunkcja) $1==1 && $2==1 ! nie (zaprzeczenie) ! $1==1
17
J.Nawrocki, Przetwarzanie tekstów i AWK Jerzy Adam 43089 I1 Adam Kowalski 43780 I2 Adam Malinowski 43990 I1 $4==”I1” && $1==”Adam” { print $2, $1; } Wzorce złożone
18
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie! $1 ~ /^A$/
19
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Początek Ciąg_zn ~ /^ wyr_reg / Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie! $1 ~ /^A/
20
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Koniec Ciąg_zn ~ / wyr_reg $/ Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie! Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Początek Ciąg_zn ~ /^ wyr_reg / $1 ~ /dzi$/
21
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Koniec Podciąg Ciąg_zn ~ / wyr_reg $/ Ciąg_zn ~ / wyr_reg / Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie! Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Początek Ciąg_zn ~ /^ wyr_reg / $1 ~ /dzi/
22
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Koniec Podciąg Ciąg_zn ~ / wyr_reg $/ Ciąg_zn ~ / wyr_reg / Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Początek Ciąg_zn ~ /^ wyr_reg / $0 ~ /dzi/ Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie!
23
J.Nawrocki, Przetwarzanie tekstów i AWK Wzorce z wyrażeniami regularnymi Koniec Podciąg Ciąg_zn ~ / wyr_reg $/ Ciąg_zn ~ / wyr_reg / Ciąg_zn ~ /^ wyr_reg $/ $0, $1, $2,.. Np. znak lub ciąg znaków Cały ciąg Początek Ciąg_zn ~ /^ wyr_reg / /dzi//dzi/ Róża prawdziwa i sztuczna Szydzi z prawdziwej sztuczna: - Krótkie twoje trwanie, Wdzięk pani wkrótce minie A mój pozostanie... - Tak - rzecze wonna róża, Rumieniąc się skromnie – Ale patrząc na panią, Myśleć będą o mnie! $0 ~ / wyr_reg / / wyr_reg / =
24
J.Nawrocki, Przetwarzanie tekstów i AWK Znaki specjalne. dowolny znak [ ] zbiór znaków \n nowa linia \. kropka \” znak cudzysłowu \ddd znak o kodzie oktalnym ddd
25
J.Nawrocki, Przetwarzanie tekstów i AWK Znaki specjalne Co robi ten program? /^.$/ /[0123456789]/ /[0-9]/
26
J.Nawrocki, Przetwarzanie tekstów i AWK Dopełnienie zbioru znaków /[^0-9]/ Co za różnica? /^[0-9]/ [^... ]
27
J.Nawrocki, Przetwarzanie tekstów i AWK Alternatywa (lub) Co robi ten program? /fi | ki/ Ząbki listka Nic tak nie potrafi gryźć Jak cudzy laurowy liść. wyr_reg | wyr_reg
28
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania $1 ~ /[0-9]/ 1 2 3 Rok 1984 4 damy Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą.
29
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania $1 ~ /^ [0-9] $/ Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą 1-cyfrową. 1 2 3 Rok 1984 4 damy Po3maj 2 raki
30
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania $1 ~ /^ [0-9] | [0-9][0-9] $/ Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą 1- lub 2-cyfrową. 1 2 3 Rok 1984 4 damy Po3maj 2 raki Po3maj 32 raki 0Po3maj 120 zl
31
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania $1 ~ /^ [0-9] | [0-9][0-9] | [0-9][0-9][0-9] $/ Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą. 1 2 3 Rok 1984 4 damy Po3maj 2 raki Po3maj 32 raki 0 Po3maj 32 raki 120 zl 1 cyfra2 cyfry3 cyfry
32
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania [0-9] = 1 [0-9] 1 [0-9][0-9] = 2 [0-9] 2 [0-9][0-9][0-9] = 3 [0-9] 3......... 1 [0-9] 1 2 | [0-9] 2 3 | [0-9] 3 |... = [0-9]+
33
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania $1 ~ /^ [0-9]+ $/ Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą. 1 2 3 Rok 1984 4 damy 1 2 3 4 damy Po3maj 2 raki Po3maj 32 raki 0 0 Po3maj 120 zl 32 raki 120 zl
34
J.Nawrocki, Przetwarzanie tekstów i AWK Operator powtarzania * w+ = w | ww | www |... w* = | w | ww | www |... Ciąg pusty x = x x = x w+ = w w*= w* w w*x = x | w+x x w* = x | x w+ Musi przynajmniej raz wystąpić w. Może wystąpić sekwencja w. ( ) w( | w | ww | www |.. )= w|ww|www|wwww|..
35
J.Nawrocki, Przetwarzanie tekstów i AWK Zagadka Co robi ten program? $2 ~ /^[0-9]+$/ Nadgodziny 2001/02 ================ Nawrocki 60 Complak 359
36
J.Nawrocki, Przetwarzanie tekstów i AWK Nawiasy /^[0-7]+(Q|O)$/ /^[0-7]+Q|O$/ 17Q10OO
37
J.Nawrocki, Przetwarzanie tekstów i AWK Opcjonalność /^ [0-9]+(D|d)? $/ 1415D16dD17D
38
J.Nawrocki, Przetwarzanie tekstów i AWK Zmienne Zmienne wprowadzone przez programistę (typ: ciąg znaków; wartość początkowa: ciąg pusty / zero) Zmienne polowe $1, $(i+j-1),.. Zmienne wbudowane (mają standardowe znaczenie)
39
J.Nawrocki, Przetwarzanie tekstów i AWK Przykładowe zmienne wbudowane NF - liczba pól w wierszu NR - numer wiersza FILENAME - nazwa pliku
40
J.Nawrocki, Przetwarzanie tekstów i AWK Zmienne {total= total + NF;} END {print "Pol: ", total; print "Wierszy: ", NR;} {total= total + NF;} END {print "Pol: ", total; print "Wierszy: ", NR;} Reguly sitwy ------------ Zero do zera A bedzie kariera. NRNF12total 0
41
J.Nawrocki, Przetwarzanie tekstów i AWK Podsumowanie gawk -f prog.awk out.txt Wyrażenia regularne Zmienne Inne mechanizmy AWK: Instrukcje złożone (if, while,..) Tablice dynamiczne Funkcje wbudowane (gsub,..) Wreszcie!
42
J.Nawrocki, Przetwarzanie tekstów i AWK Literatura 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), 23-46.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.