Przetwarzanie tekstów i AWK Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 7
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 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
J.Nawrocki, AWK, Wykład 7 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
J.Nawrocki, AWK, Wykład 7 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
J.Nawrocki, AWK, Wykład 7 Wprowadzenie Powstanie języka AWK: Aho, Weinberger, Kernighan Bell Labs, New Jersey (USA), 1977 Platformy: Unix, MS DOS/Windows Podobieństwo do C
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Pole Wiersz Pola: $1, $2, $3,... Plik wejściowy
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Schemat programu w AWK wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Reguła przetwarzania
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 Idea języka AWK Zasada działania wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} wzorzec1 {instrukcje1} wzorzec2 {instrukcje2} Jerzy Nawrocki Jan Kowalski Adam Malinowski
J.Nawrocki, AWK, Wykład 7 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
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 Najprostsze programy Nawrocki Jerzy Malinowski Adam $4==I1 { print $2, $1; } Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Ile pól na wyjściu?
J.Nawrocki, AWK, Wykład 7 Najprostsze programy Jerzy Nawrocki I1 Adam Malinowski I1 Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 $4==I1$4==I1 Ile pól na wyjściu?
J.Nawrocki, AWK, Wykład 7 Nawrocki Jerzy Kowalski Jan Malinowski Adam Najprostsze programy { print $2, $1; } { print $2, $1; } Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Jakie pole najpierw?
J.Nawrocki, AWK, Wykład 7 Nawrocki Jerzy Kowalski Jan Malinowski Adam Najprostsze programy Jak zrobić tabelę? Nawrocki Jerzy Kowalski Jan Malinowski Adam
J.Nawrocki, AWK, Wykład 7 Nawrocki Jerzy Kowalski Jan Malinowski Adam Najprostsze programy # Nazwiska studentow { printf("%-15s %-9s\n", $2, $1) } { printf("%-15s %-9s\n", $2, $1) } # Nazwiska studentow { printf("%-15s %-9s\n", $2, $1) } { printf("%-15s %-9s\n", $2, $1) } Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1 Komentarz
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 Wzorce wiersza Początek i koniec tekstu Relacje Wzorce złożone Wzorce zakresu Wyrażenia regularne
J.Nawrocki, AWK, Wykład Kowalski Jan ***** Początek i koniec tekstu BEGIN { print -----; } $4==I2 { print $2, $1; } END { print *****; } BEGIN { print -----; } $4==I2 { print $2, $1; } END { print *****; } Jerzy Nawrocki I1 Jan Kowalski I2 Adam Malinowski I1
J.Nawrocki, AWK, Wykład dwa 11 Relacje $1 > $ dwa 11
J.Nawrocki, AWK, Wykład 7 Wzorce złożone || lub (alternatywa) $1==1 || $2==1 && i (koniunkcja) $1==1 && $2==1 ! nie (zaprzeczenie) ! $1==1
J.Nawrocki, AWK, Wykład 7 Wzorce złożone Jerzy Adam I1 Adam Kowalski I2 Adam Malinowski I1 $4==I1 && $1==Adam { print $2, $1; } Malinowski Adam
J.Nawrocki, AWK, Wykład 7 Wzorce zakresu Wzorzec 1, Wzorzec 2
J.Nawrocki, AWK, Wykład 7 Wzorce zakresu Jerzy Adamski I1 Adam Kowalski I2 Adam Malinowski I1 /Adam/, /I2/ Jerzy Adamski I1 Adam Kowalski I2
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Wyraż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,.. } Wyrażenie regularne: 1+ Zbiór ciągów: {1, 11, 111, 1111,.. }
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne wyrażenie ~ /wyrażenie_regularne/ Ciąg znakówZbiór ciągów znaków Wzorce z wyrażeniami regularnymi $1 ~ /1/
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Zagadka Co robi ten program? $1 ~ /a/ Prawda kole W aureolę. J.Sztaudynger J.Sztaudynger
J.Nawrocki, AWK, Wykład 7 Prawda kole J.Sztaudynger J.Sztaudynger Wyrażenia regularne Zagadka Co robi ten program? $1 ~ /a/ Prawda kole W aureolę. J.Sztaudynger J.Sztaudynger
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne wyrażenie !~ /wyrażenie_regularne/ Ciąg znakówZbiór ciągów znaków Wzorce z wyrażeniami regularnymi $1 !~ /1/
J.Nawrocki, AWK, Wykład 7 W aureolę. Wyrażenia regularne Zagadka Co robi ten program? $1 !~ /a/ Prawda kole W aureolę. J.Sztaudynger J.Sztaudynger
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne /wyrażenie_regularne/ Zbiór ciągów znaków Wzorce z wyrażeniami regularnymi A gdzie jest ciąg znaków? /1/ $0 ~ /1/ =
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Zagadka Co robi ten program? /z/ - Módl się i pracuj - Radzą przyjacioły, To się inni obłowią, a Ty będziesz goły.
J.Nawrocki, AWK, Wykład 7 Radzą przyjacioły, a Ty będziesz goły. Wyrażenia regularne Zagadka Co robi ten program? /z/ - Módl się i pracuj - Radzą przyjacioły, To się inni obłowią, a Ty będziesz goły.
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Znaki 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, AWK, Wykład 7 Wyrażenia regularne Znaki specjalne /^n$/ Co robi ten program? /^.$/ /[ ]/ /[0-9]/
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Dopełnienie zbioru znaków /[^0-9]/ Co za różnica? /^[0-9]/ [^... ] ! /[0-9]/
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Podstawowe operatory /Adam/ Konkatenacja
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Zagadka Co zrobi ten program? /am/ Jabłek nie jadam. Zmądrzałem. Adam Adam
J.Nawrocki, AWK, Wykład 7 Jabłek nie jadam. Adam Adam Wyrażenia regularne Zagadka Co zrobi ten program? /am/ Jabłek nie jadam. Zmądrzałem. Adam Adam
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Podstawowe operatory /Adam/ Konkatenacja /Adam | Jurek/ Alternatywa
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Zagadka Co robi ten program? /fi | ki/ Ząbki listka Nic tak nie potrafi gryźć Jak cudzy laurowy liść.
J.Nawrocki, AWK, Wykład 7 Ząbki listka Nic tak nie potrafi gryźć Wyrażenia regularne Zagadka Co robi ten program? /fi | ki/ Ząbki listka Nic tak nie potrafi gryźć Jak cudzy laurowy liść.
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Podstawowe operatory /Adam/ Konkatenacja /Adam | Jurek/ Alternatywa /[0-9][0-9]*/ Domknięcie zwrotne [0-9] [0-9][0-9] [0-9][0-9][0-9]... [0-9] [0-9][0-9] [0-9][0-9][0-9]
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Zagadka Co robi ten program? $2 ~ /^[0-9][0-9]*$/ Nadgodziny 2001/02 ================ Nawrocki 60 Complak 359
J.Nawrocki, AWK, Wykład 7 Nawrocki 60 Complak 359 Wyrażenia regularne Zagadka Co robi ten program? $2 ~ /^[0-9][0-9]*$/ Nadgodziny 2001/02 ================ Nawrocki 60 Complak 359
J.Nawrocki, AWK, Wykład 7 Wyrażenia regularne Pozostałe elementy /[0-7][0-7]*(Q|O)/ Nawiasy () /[0-7]+ (Q|O)/ Domknięcie dodatnie + /[0-9]+ (D|d)?/ Opcjonalność ?
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 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)
J.Nawrocki, AWK, Wykład 7 Zmienne {total= total + NF} END {print "File: ", FILENAME; print "Num. of fields: ", total; print "Lines: ", NR} {total= total + NF} END {print "File: ", FILENAME; print "Num. of fields: ", total; print "Lines: ", NR} NF - liczba pól w wierszu NR - numer wiersza FILENAME - nazwa pliku
J.Nawrocki, AWK, Wykład 7 Plan wykładu Wprowadzenie Idea języka AWK Najprostsze programy Wzorce wiersza Wyrażenia regularne Zmienne Zaawansowane mechanizmy AWK
J.Nawrocki, AWK, Wykład 7 Zawansowane mechanizmy AWK Funkcje wbudowane (gsub,..) Instrukcje złożone (if, while,..) Tablice dynamiczne Funkcje getline i next Operatory przekierowania
J.Nawrocki, AWK, Wykład 7 Nawrocki 60 Complak 359 Zawansowane mechanizmy AWK Jerzy 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];} {zl[$2]= zl[$2] + $3;} END {for (i in zl) print i, zl[i];}
J.Nawrocki, AWK, Wykład 7 Podsumowanie gawk -f prog.awk in.txt >out.txt Proste ale użyteczne programy 15 kompletnych przykładów Wreszcie!
J.Nawrocki, AWK, Wykład 7 Literatura A. Aho, B. Kernighan, P. Weinberger, The AWK Programming Language, Addison-Wesley, Reading, J. Nawrocki, W. Complak, Wprowadzenie do przetwarzania tekstów w języku AWK, Pro Dialog 2 (1994),
J.Nawrocki, AWK, Wykład 7 Ocena wykładu 1. Wrażenie ogólne? (1 - 6) 2. Zbyt wolno czy zbyt szybko? 3. Czy dowiedziałeś się czegoś ważnego? 4. Co poprawić i jak?