Wstep do systemów wielozadaniowych laboratorium 19 --- awkpiersaj/www/contents/... · Ćwiczenia...

25
Ćwiczenia Zadania domowe Wstęp do systemów wielozadaniowych laboratorium 19 — awk Jaroslaw Piersa Wydzial Matematyki i Informatyki, Uniwersytet Mikolaja Kopernika 2013-01-08 J. Piersa WSWZ 2012/2013 Laboratorium 19

Transcript of Wstep do systemów wielozadaniowych laboratorium 19 --- awkpiersaj/www/contents/... · Ćwiczenia...

ĆwiczeniaZadania domowe

Wstęp do systemów wielozadaniowychlaboratorium 19 — awk

Jarosław Piersa

Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika

2013-01-08

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Idea

Język programowania do pracy z bazami danych (w formietekstowej)

wiersz w pliku = rekord

słowa w danym wierszu = pola rekordu

awk przegląda każdy wiersz, jeżeli dopasuje go do wzorca, towykonuje akcję

ogólna składnia:wzorzec { akcja; }

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Prosty przykład

awk ’//{ print $0; } ’ ścieżka/do/plikuawk -f skrypt ścieżka/do/pliku

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 1

Napisz polecenie AWK, które wyświetli całą zawartość plikumiędzy liniami piątą a dziesiątą

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Wzorzec

BEGIN — przed pierwszą linią

END — po ostatniej linii

END — po ostatniej linii

/wyrażenie regularne / — dopasowane wyrażenia

NR==10 — numer rekordu (wiersza)

! wzorzec — negacja warunku

wzorzec A || wzorzec B — alternatywa warunków

wzorzec A && wzorzec B — koniunkcja warunków

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 2

Napisz polecenie AWK, które wyświetli całą zawartość plikumiędzy liniami piątą, a dziesiątą

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Zmienne

FS — separator pól

RS — separator rekordów

OFS ORS — separator rekordów i rekordów w pliku wyjściowym

NF — ilość pól w bieżącym rekordzie

NR — numer bieżącego rekordu

$0 — cały rekord

$1 $2 — pole pierwsze, pole drugie

FILENAME — przetwarzany plik

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 3

wyświetl ile wierszy i rekordów w każdym z wierszy ma plikpasswd (ten rozszerzony)

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Zmienne c.d.

{zm = wartość;} — w awk można stosować zmienne (bezdeklaracji)

{zm = $1 + $5; print zm;} — operacje na zmiennych wstylu C

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 4

napisz polecenie, które wyświetli w każdym wierszu sumę pólpiątego i szóstego

napisz polecenie, które wyświetli sumę wszystkich pól piątych isumę pól szóstych w całym pliku

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Instrukcja warunkowa

instrukcja warunkowa (składnia w stylu c):

/[0-9]*/ {if (zm == 2 && a <= 4 ) {instrukcja1 ;

} else {instrukcja2 ;

} # if} # akcja

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 5

napisz polecenie, które obliczy w ilu wierszach suma pól piątego,szóstego i siódmego jest większa niż 22, a w ilu mniejsza

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Pętla

Pętla for (składnia w stylu c):

/[0-9]*/ {for (i=2 ; i<8 ; i++ ) {instrukcja1 ;

} # for} # akcjaPętla while:

/[0-9]*/ {while (a+1 != 10 ) {a++;;

} # while} # akcja

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie 6

napisz polecenie, które wczyta z pliku liczbę n ≥ 2, a następnienarysuje na wyjściu trójkąt prostokątny o wysokości i podstawierównej n.

np: n = 4:

**** *****

wskazówka: użyj printf zamiast print (łamanie linii poprzez:printf "napis\nnapis2")

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Funkcje

Funkcje:

function sqr( n ) {return n * n;

}

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Tablice

Tablice:

tabl[ indeks ] = 1;

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie

Napisz skrypt awk, który zliczy ilość liczb w każdym wierszu

a następnie wypisze te liczby posortowane

wskazówka: wykorzystaj jako separator pól odpowiedniewyrażenie regularne

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Tablice hashowane

tablice mogą być indeksowane napisami:

tabl[ "ala ma kota"] = 1;

iterowanie po tablicach hashowanych

for (slowo in tablica ) {print slowo tablica[slowo]

}

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

przeanalizuj skrypt

posortuj kolejność wypisywania

BEGIN{ tab [ ”Ala ” ] = 0 ;tab [ ”Ola” ] = 0 ;

}/ [ aA ] l a /{ tab [ ”Ala ”]++; }/ [Oo ] l a /{ tab [ ”Ola”]++; }END{f o r ( im i e i n tab ){p r i n t f ( ” im i e %s wys t epu j e %d ra zy ” ,imie , tab [ im i e ] ) ;

} # f o r}

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Operacje na napisach

index(string, substring )

length(string )

split (string, tab ) — podział napisu na tablicę wedługzmiennej FS (może być wyrażenie regularne)

substr(string, start ) — podnapis od pozycji start dokońca

substr(string, start, koniec ) — podnapis od pozycjistart długości k znaków

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe

IdeaElementy języka

Ćwiczenie

dana niech będzie tablica hashowna: tab["Ala"]="Alice";tab["ma"]="has"; tab["kota"]="a kitty";

napisz prosty translator, który słowo po słowie zmienia wyrazypolskie na angielskie (o ile ma tłumaczenia w słowniku)

jeżeli nie ma tłumaczenia, to pozostawia słowo bez zmian

wynik wypisze na stdout

można skorzystać z sub()

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe Zadanie 1

Zadanie domowe 1 — Trójmian kwadratowy

Napisz skrypt w awk, który

zostanie wykonany na pliku, który zawiera po trzy liczby wwierszu (pierwsza niezerowa): a b c

dla każdego wiersza: potraktuje te liczby jako współczynnikitrójmianu: ax2 + bx + c

obliczy i wypisze pierwiastki rzeczywiste (jeśli są dwa),pierwiastek (jeśli jeden), lub informację o ich braku

na koniec podsumuje, ile trójmianów miało po dwa, jeden lubbrak pierwiastków rzeczywistych

wskazówka: pierwiastek kwadratowy: sqrt()

punktacja: 1p.

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe Zadanie 1

Zadanie domowe 2 — Oceniacz

z arkusza z wynikami z przedmiotu (na moodle) wyeksportujarkusz drugi (z punktacją) jako plik csv,

wskazówka: eksportując można wybrać separator pól (zalecany)oraz opcję cytowania napisów (zalecane bez)

napisz skrypt, który automatycznie przeanalizuje arkusz, wystawioceny i wypisze wyniki np:Pan/i Nazwisko Imię Punktacja Ocena

oraz na koniec podsumuje ile jest poszczególnych ocen: npwystawionych ocen NDST: 0 (mam nadzieję — JP)

można pominąć osoby, które są skreślone z zajęć

punktacja: 1p.

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe Zadanie 1

Zadanie domowe 3 — Analiza logów

napisz skrypt, który przeanalizuje plik z logami aktywnościuczestników kursu na moodle

skrypt dla każdego uczestnika obliczyć jego całkowitą aktywnośćw kursie, a następnie wypisać podsumowanie: Pan/i NazwiskoImię aktywność, posortowane malejąco (wg aktywności)

UWAGA: z logów wycięte są adresy IP i godziny

punktacja: 1p.

J. Piersa WSWZ 2012/2013 Laboratorium 19

ĆwiczeniaZadania domowe Zadanie 1

Źródła

http://www.gnu.org/software/gawk/

http://www.sunsite.ualberta.ca/Documentation/Gnu/

można szukać również pod nazwami nawk lub gawk

J. Piersa WSWZ 2012/2013 Laboratorium 19