Wstep do systemów wielozadaniowych laboratorium 19 --- awkpiersaj/www/contents/... · Ćwiczenia...
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