Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.

Podobne prezentacje


Prezentacja na temat: "AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka."— Zapis prezentacji:

1 AWK aczajka@man.poznan.pl Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka

2 Spis treści Wprowadzenie Wzorce Akcje Wejście-wyjście Tablice Funkcje niestandardowe

3 Copyright, 2003 © Adam Czajka Wprowadzenie Plik wejściowy : 33151 Adam Nowak 5.0 4.5 3.0 33152 Eugeniusz Słaby 3.0 3.5 3.0 34200 Dorota Mądra 4.5 5.0 4.5 34205 Piotr Kowalski 4.0 4.5 3.5 Zadanie: Policz średnią ocen studentów i wypisz liczbę studentów o średniej co najmniej 4.0.

4 Copyright, 2003 © Adam Czajka Wprowadzenie Plik wyjściowy : Lp. Indeks Imie Nazwisko | Srednia --------------------------------+------ 1 33151 Adam Nowak | 4.17 2 33152 Eugeniusz Słaby | 3.17 3 34200 Dorota Mądra | 4.67 4 34205 Piotr Kowalski | 4.00 Liczba osób >= 4.0: 3

5 Copyright, 2003 © Adam Czajka Wprowadzenie Program w AWK : BEGIN { Lp = 1; Num = 0; print Lp. Indeks Imie Nazwisko | Srednia; print --------------------------------+------; { srednia = ($4 + $5 + $6) / 3.0; printf(%-4d %-5d %-9s %-8s | %-4.2f\n, Lp, $1, $2, $3, srednia); Lp++; if (srednia >= 4.0) Num++; } END { print Liczba osób >= 4.0:, Num; }

6 Copyright, 2003 © Adam Czajka Wprowadzenie BEGIN {... akcje... } Wzorzec_1 {... akcje... } Wzorzec_2 {... akcje... }.......... Wzorzec_N {... akcje... } END {... akcje... }... Funkcje_niestandardowe... Ogólna struktura programu :

7 Copyright, 2003 © Adam Czajka Wprowadzenie Pola w wierszu : 33151 Adam Nowak 5.0 4.5 3.0 $1 $2 $3$4$5 $6 $0

8 Copyright, 2003 © Adam Czajka Wprowadzenie Kompilacja programu : Kod źródłowy: plik.awk Dane wejściowe: dane.txt Dane wyjściowe: wyniki.txt gawk –f plik.awk wyniki.txt gawk –f plik.awk < dane.txt gawk –f plik.awk > wyniki.txt gawk –f plik.awk

9 Copyright, 2003 © Adam Czajka Wzorce Rodzaje wzorców : Wzorce dotyczące początku i końca tekstu wejściowego Wzorce zawierające relacje Wzorce zawierające wyrażenia regularne Wzorce złożone Wzorce zakresu

10 Copyright, 2003 © Adam Czajka Wzorce Wzorce dotyczące początku i końca tekstu wejściowego: BEGIN { Suma = 0; } { Suma += $1; } END { print Suma; } BEGIN END Zadanie: Napisz program obliczający sumę liczb całkowitych z pliku wejściowego

11 Copyright, 2003 © Adam Czajka Wzorce Wzorce dotyczące początku i końca tekstu wejściowego: BEGIN { Suma = 0; } { Suma += $1; } END { print Suma; } BEGIN END PROBLEM: Co się stanie jeśli w pliku nie będą tylko liczby ?

12 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające relacje :, =, ==, != Zadanie: Napisz program wypisujący te wiersze pliku wejściowego, w których pierwsze pole jest większe od drugiego $1 > $2 { print $0; }

13 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające relacje : Plik wejściowy : 12 11 2 11 dwa 11 Plik wyjściowy : 12 11 dwa 11

14 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /wyrażenie_reg/ - wiersz musi zawierać ciąg znaków opisany przez wyrażenie_reg wyrażenie ~ /wyrażenie_reg/ - ciąg znaków będący wartością obiektu wyrażenie musi zawierać ciąg znaków opisany przez wyrażenie_reg wyrażenie !~ /wyrażenie_reg/ - ciąg znaków będący wartością obiektu wyrażenie nie może zawierać ciągu znaków opisanego przez wyrażenie_reg

15 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /s/ { print $0; } Plik wyjściowy : 33152 Eugeniusz Słaby 3.0 3.5 3.0 34205 Piotr Kowalski 4.0 4.5 3.5 $3 ~ /s/ { print $0; } Plik wyjściowy : 34205 Piotr Kowalski 4.0 4.5 3.5

16 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : ^ - początek pola, dopełnienie zbioru $ - koniec pola. - dowolny znak [ ] - zbiór \ - symbol specjalny ( \b \r \t \n \ \. \ddd ) | - alternatywa ( ) - grupowanie * + - domknięcie ? - operator warunkowy Znaki specjalne :

17 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /^a$/ { print $0; } /^.$/ { print $0; } /^\.$/ { print $0; } $1 ~ /^a$/ { print $1; } $1 ~ /^...$/ { print $1; } /^.\$/ { print $0; }

18 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /[0123456789]/ { print $0; } /[0-9]/ { print $0; } /[^0-9]/ { print $0; } /^[0-9]/ { print $0; } Dopełnienie zbioru Początek wiersza

19 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /[0-9][0-9]/ { print $0; } /Adam|Piotr/ { print $0; } Program wypisuje wiersze, w których znajdują się liczby dwucyfrowe. Jak zapisać wzorzec dla dowolnej liczby całkowitej ?

20 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : ε a aa aaa aaaa........ a* Operator domknięcia

21 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : a aa aaa aaaa........ a+ Operator domknięcia dodatniego a+ aa*

22 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : /[0-9]/ { print $0; } /[0-9]*/ { print $0; } /[0-9]+/ { print $0; } /[0-9][0-9]*/ { print $0; } Pytanie: Jak zapisać liczby rzeczywiste ? /[0-9A-F]+(H|h)/ { print $0; } /[0-9]+(D|d)?/ { print $0; }

23 Copyright, 2003 © Adam Czajka Wzorce Wzorce zawierające wyrażenia regularne : BEGIN { Suma = 0; } $1 ~ /[0-9]+/ { Suma += $1; } END { print Suma; } Zadanie: Napisz program obliczający sumę liczb całkowitych z pliku wejściowego

24 Copyright, 2003 © Adam Czajka Wzorce Wzorce złożone : && - koniunkcja || - alternatywa ! - negacja Jeden lub więcej wzorców połączonych operatorami : $2 == Adam || $3 == Kowalski{ print $0; }

25 Copyright, 2003 © Adam Czajka Wzorce Wzorce zakresu : /wzorzec_1/, /wzorzec_2/ /Adam/, /Nowak/ { print $0; } Plik wyjściowy : 33151 Adam Nowak 5.0 4.5 3.0

26 Copyright, 2003 © Adam Czajka Wzorce Wzorce zakresu : /wzorzec_1/, /wzorzec_2/ /Adam/, /Kowalski/ { print $0; } Plik wyjściowy : 33151 Adam Nowak 5.0 4.5 3.0 33152 Eugeniusz Słaby 3.0 3.5 3.0 34200 Dorota Mądra 4.5 5.0 4.5 34205 Piotr Kowalski 4.0 4.5 3.5

27 Copyright, 2003 © Adam Czajka Akcje Akcja = ciąg instrukcji języka C Pytanie: Co będzie się działo, gdy dla danego wzorca pominiemy akcję ? Np. $2 == Adam Odpowiedź: Akcja pusta jest równoważna akcji: print $0

28 Copyright, 2003 © Adam Czajka Akcje Akcja = ciąg instrukcji języka C Pytanie: Co będzie się działo, gdy dla danego wzorca pominiemy akcję ? Np. $2 == Adam Odpowiedź: $2 == Adam { print $0 }

29 Copyright, 2003 © Adam Czajka Akcje W akcjach możemy używać zmiennych: zmiennych nie deklarujemy w sposób jawny deklaracja następuje przez użycie zmiennej BEGIN { Suma = 0; } { Suma += $1; } END { print Suma; }

30 Copyright, 2003 © Adam Czajka Akcje Zmienne predefiniowane: $0, $1, $2, $3,... – pola wiersza wejściowego ARGC – liczba argumentów w poleceniu gawk.exe ARGV – tablica argumentów FILENAME – nazwa bieżącego pliku wejściowego FNR – liczba wierszy w bieżącym pliku FS – separator pól w pliku wejściowym

31 Copyright, 2003 © Adam Czajka Akcje Zmienne predefiniowane: NF – liczba pól w bieżącym wierszu NR – numer bieżącego wiersza RS – separator wierszy w pliku wejściowym OFS – separator pól w pliku wyjściowym ORS – separator wierszy w pliku wyjściowym

32 Copyright, 2003 © Adam Czajka Akcje Wyrażenia: Wyrażenia zbudowane są ze zmiennych i wywołań funkcji przy użyciu operatorów znanych z języka C { zmienna++; } { zmienna = zmienna + 1; } { zmienna = sqrt(number); }

33 Copyright, 2003 © Adam Czajka Akcje Funkcje predefiniowane: atan2(x, y) – arctg(x/y) cos(x) – cos(x) exp(x) – e x int(x) – [x] log(x) – ln(x) sin(x) – sin(x) sqrt(x) – x

34 Copyright, 2003 © Adam Czajka Akcje Funkcje predefiniowane: gsub(r, s, t) – każde wystąpienie ciągu r w ciągu t jest zastępowane przez ciąg s gsub(r, s) – gsub(r, s, $0) index(s, t) – indeks pozycji pierwszego wystąpienia ciągu s w t, lub 0 gdy s nie występuje w t length(s) – długość ciągu s

35 Copyright, 2003 © Adam Czajka Akcje Funkcje predefiniowane: sub(r, s, t) – pierwsze wystąpienie ciągu r w ciągu t jest zastępowane przez ciąg s sub(r, s) – sub(r, s, $0) substr(s, p) – podciąg ciągu s zaczynający się na pozycji p substr(s, p, n) – podciąg ciągu s zaczynający się na pozycji p i mający długość n

36 Copyright, 2003 © Adam Czajka Akcje Funkcje predefiniowane: split(s, a, f) – zamienia ciąg s na tablicę pól zapisaną w a na podstawie wartości separatora f

37 Copyright, 2003 © Adam Czajka Akcje Instrukcje : if (wyrażenie) instrukcja if (wyrażenie) instrukcja else instrukcja while (wyrażenie) instrukcja for (wyrażenie; wyrażenie; wyrażenie) instrukcja do instrukcja while (wyrażenie) { ciąg_instrukcji } next

38 Copyright, 2003 © Adam Czajka Akcje Instrukcje : Zadanie : Napisz program obliczający sumę liczb całkowitych w każdym wierszu pliku wejściowego. W pliku wyjściowym należy przepisać plik wejściowy umieszczając na końcu każdego wiersza po znaku dwukropka obliczoną sumę liczb.

39 Copyright, 2003 © Adam Czajka Akcje Instrukcje : { suma = 0; for(i=1; i<=NF; i++) { if ($i ~ /[0-9]+/) suma += $i; } printf(%s : %d\n, $0, suma); } Rozwiązanie zadania :

40 Copyright, 2003 © Adam Czajka Akcje Instrukcje : $2 == Adam { a = 1; next; } $3 == Nowak { a = 2; } next – pomija analizę dalszych wzorców i przechodzi do kolejnego wiersza w pliku wejściowym a = 1

41 Copyright, 2003 © Adam Czajka Wejście-wyjście Wyjście : print – wypisuje bieżący wiersz print wyr1, wyr2,..., wyrN – wypisuje wyrażenia wyr1, wyr2,..., wyrN a następnie wypisuje znak końca linii. printf(str, arg1, arg2,..., argN) – wypisuje argumenty arg1, arg2,..., argN zgodnie z łańcuchem formatującym str (nie wypisuje automatycznie znaku końca linii)

42 Copyright, 2003 © Adam Czajka Wejście-wyjście Wyjście do pliku : > nazwa_pliku – tworzy nowy plik o danej nazwie i zapisuje do niego ciąg będący rezultatem działania danej funkcji print >> nazwa_pliku – ciąg będący rezultatem działania danej funkcji print zostanie dołączony na końcu pliku o danej nazwie | polecenie - ciąg będący rezultatem działania danej funkcji print stanowi dane wejściowe dla danego polecenia

43 Copyright, 2003 © Adam Czajka Wejście-wyjście Zadanie : Każdy wiersz pliku wejściowego ma postać: Imię Nazwisko kwota operacja gdzie operacja = + | - Napisz program, który dla każdej osoby utworzy plik z historią operacji na koncie. Nazwa pliku wynikowego ma postać: nazwisko_imie.txt Wyjście do pliku :

44 Copyright, 2003 © Adam Czajka Wejście-wyjście { plik = $2 _ $1.txt; print $3, $4 >> plik; } Rozwiązanie zadania : Wyjście do pliku :

45 Copyright, 2003 © Adam Czajka Wejście-wyjście Wejście z pliku : getline < nazwa_pliku – odczytuje kolejny wiersz z pliku o danej nazwie, przypisuje go do zmiennej $0 i dzieli na poszczególne pola $1, $2,.... getline x < nazwa_pliku – odczytuje kolejny wiersz z pliku o danej nazwie, przypisuje go do zmiennej x (nie ma podziału na pola !!!)

46 Copyright, 2003 © Adam Czajka Wejście-wyjście Wejście z pliku : Fukcja getline przyjmuje wartości: 1 – gdy wykonanie funkcji zakończyło się pomyślnie 0 – gdy natrafiono na koniec pliku -1 – gdy wystąpiły błędy podczas wykonania funkcji

47 Copyright, 2003 © Adam Czajka Tablice Własności tablic : Tablic nie deklarujemy w sposób jawny Element tablicy jest tworzony w momencie odwołania się do niego Tablice mają charakter dynamiczny Indeksami tablic mogą być dowolne wyrażenia

48 Copyright, 2003 © Adam Czajka Tablice { licznik = 0; suma = 0; for (i=$4; i<=NF; i++, licznik++) suma += $i; if (licznik != 0) Srednia[$1] = suma / licznik; } Pytanie: Jak wypisać zawartość tablicy ? Przykład :

49 Copyright, 2003 © Adam Czajka Tablice END { for (numer in srednia) { print numer, srednia[numer]; } Przykład :

50 Copyright, 2003 © Adam Czajka Tablice Operacje na tablicach : tablica[x] – odwołanie do elementu tablicy if (indeks in tablica) – sprawdza czy dany indeks istnieje w tablicy for (zmi in tablica) – wykonuje pętlę dla danej tablicy, przypisując do zmiennej zmi wartości kolejnych indeksów tej tablicy delete tablica[x] – usuwa dany element z tablicy

51 Copyright, 2003 © Adam Czajka Funkcje niestandardowe Deklaracja funkcji niestandardowej : function nazwa(arg1, arg2,..., argN) {.... Instrukcje.... return wyrażenie } Fukcje niestandardowe muszą być umieszczone na końcu programu !

52 Copyright, 2003 © Adam Czajka Funkcje niestandardowe Deklaracja funkcji niestandardowej : { if (parzysta($1)) print $1, P; else print $1, N; } function parzysta(liczba) { if (liczba % 2 == 0) return 1; return 0; }

53 Copyright, 2003 © Adam Czajka Podsumowanie Wprowadzenie Wzorce Akcje Wejście-wyjście Tablice Funkcje niestandardowe


Pobierz ppt "AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka."

Podobne prezentacje


Reklamy Google