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

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Egzamin.
Grażyna Mirkowska PJWSTK 15 listopad 2000
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
Wprowadzenie do języka skryptowego PHP – cz. 2
Języki programowania C++
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Przetwarzanie tekstów i AWK Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Przetwarzanie tekstów i AWK Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Przetwarzanie tekstów i AWK Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 7
Przetwarzanie tekstów i AWK
Programowanie imperatywne i język C
Przetwarzanie tekstów i AWK Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 5
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Przetwarzanie tekstów i AWK Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 7
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Wyrażenia regularne i język AWK
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
Laboratoria z „wstęp do programowania”
Programowanie w C Wykład 3
Wykład 2 struktura programu elementy języka typy zmienne
Wyrażenia Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są jednozdaniowymi przepisami.
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
Wprowadzenie do programowania w języku Turbo Pascal
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania
Programowanie strukturalne i obiektowe
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Pierwsze programy.
Przetwarzanie tekstu i strony WWW Copyright, 1999 © Jerzy R. Nawrocki Wprowadzenie.
TABLICE C++.
Wyrażenia w Turbo Pascalu.
Algorytmy i struktury danych
Generator analizatorów leksykalnych
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
Podstawy programowania
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
C# Platforma .NET CZ.3 Kuba Ostrowski.
Instrukcja warunkowa i wyboru
Podstawy informatyki 2013/2014
Gramatyki i translatory
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Podstawy języka Instrukcje - wprowadzenie
PWSW Mechatronika Wykład 7 Matlab cd.
Przetwarzanie tekstów i AWK Copyright, 2007 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 5
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wyrażenia regularne i język AWK Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Wstęp do Informatyki - Wykład 6
Przetwarzanie tekstów i AWK
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

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

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

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

Copyright, 2003 © Adam Czajka Wprowadzenie Plik wyjściowy : Lp. Indeks Imie Nazwisko | Srednia Adam Nowak | Eugeniusz Słaby | Dorota Mądra | Piotr Kowalski | 4.00 Liczba osób >= 4.0: 3

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; }

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

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

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

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

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

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 ?

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; }

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

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

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

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 :

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; }

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

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 ?

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

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

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; }

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

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; }

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

Copyright, 2003 © Adam Czajka Wzorce Wzorce zakresu : /wzorzec_1/, /wzorzec_2/ /Adam/, /Kowalski/ { print $0; } Plik wyjściowy : Adam Nowak Eugeniusz Słaby Dorota Mądra Piotr Kowalski

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

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 }

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; }

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

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

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); }

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

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

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

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

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

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.

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 :

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

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)

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

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 :

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

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 !!!)

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

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

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 :

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

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

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 !

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; }

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