Zadanie1
Przeanalizować poniższy skrypt (plik userlist):
#!/bin/sh
who | awk '{print $1}' | sort | uniq | xargs -i"{}" grep -e "^{}:" /etc/passwd | awk -f awkuserlist
oraz plik awkuserlist (skrypt programu awk) który jest w nim wykorzystany:
BEGIN {
FS=":"
print "<xml version="1.0">";
}
{
match($5, "^[^, ]*");
imie=substr($5, RSTART, RLENGTH);
match($5, " [^, ]*");
nazwisko=substr($5, RSTART+1, RLENGTH-1);
login=$1;
uid=$3;
gid=$4;
home=$6;
shell=$7;
print "<osoba>";
print "<imie>"imie"</imie>";
print "<nazwisko>"nazwisko"</nazwisko>";
print "<login>"login"</login>";
print "<uid>"uid"</uid>";
print "<gid>"gid"</gid>";
print "<home>"home"</home>";
print "<shell>"shell"</shell>";
print "</osoba>";
}
END {
print "</xml>";
}
<osoba>
<dana1>wartosc1</dana1>
<dana2>wartosc2</dana2>
<dana3>wartosc3</dana3>
<dana4>wartosc4</dana4>
</osoba>
-------------------------------------------
dana1: wartosc1
dana2: wartosc2
dana3: wartosc3
dana4: wartosc4
-------------------------------------------
<osoba>
<imie>Jan</imie>
<nazwisko>Kowalski</nazwisko>
<login>jkowalski</login>
<uid>1</uid>
<gid>1</gid>
<home>/home/users/jkowalski</home>
<shell>/bin/bash</shell>
<miasto>Kraków</miasto>
</osoba>
-------------------------------------------
imie: Jan
nazwisko: Kowalski
login: jkowalski
uid: 1
gid: 1
home: /home/users/jkowalski
shell: /bin/bash
miasto: Kraków
-------------------------------------------
Zadanie 2
BibTeX to narzędzie służące do formatowania bibliografii.
Operuje ono na danych zawartych w plikach o rozszerzeniu „bib”
zawierających dane bibliograficzne.
Przykład pliku: publikacje.bib.txt.
Poszczególne wpisy bibliograficzne mają następującą postać:
@rodzaj{klucz,
author = {wartość},
title = {wartość},
year = wartość,
other = {wartość}
}
Zadanie polega na stworzeniu skryptu bash
,
który przy użyciu awk
wybierze z pliku tylko te wpisy bibliograficzne,
które odpowiadają zapytaniu użytkownika.
Tzn. skrypt zapisany w pliku szukaj
powinien obsługiwać
następujące opcje (-a, -t, -k):
./szukaj -a Nalepa
- wyszuka wszystkie publikacje autorstwa Nalepy (te wpisy bibtexowe, w których polu author
występuje Nalepa
),
./szukaj -t slowo
- wyszuka wszystkie publikacje zawierające w tytule ciąg slowo
,
./szukaj -k slowo
- wyszuka wszystkie publikacje zawierające ciąg slowo
w dowolnym polu.
Zadanie 3
Napisz skrypt programu awk który policzy i wyświetli średnią ocen dla każdego studenta.
Lista studentów oraz ocen jest zapisana w pliku, którego nazwę podajemy jako parametr uruchomienia programu awk (nazwa pliku nie może być zakodowana wewnątrz skryptu).
Format pliku zawierającego listę studentów oraz ocen jest następujący:
login_1:ocena_1,ocena_2,ocena_3
login_2:ocena_1,ocena_2,ocena_3,ocena_4
Należy przyjąć następujące założenia:
login_n
- jest loginem danego studenta.
login_n
- istnieje w pliku /etc/passwd
.
Liczba studentów nie jest określona, definiuje ją tylko i wyłącznie liczba linii w pliku.
Plik zawiera tylko linie w powyższym formacie - przyjmujemy jako aksjomat i nie weryfikujemy tej kwestii.
ocena_n
- oznacza ocenę, liczbę ze zbioru {2.0, 3.0, 3.5, 4.0, 4.5, 5.0}
(nie ma przymusu sprawdzania poprawności - przyjmujemy że oceny są wpisane poprawnie).
Liczba ocen dla każdego studenta nie jest określona i może być różna.
Spacje w pliku nie wpływają na sposób jego przetwarzania.
Jako rezultat, skrypt powinien wyświetlić informację o uzyskanej średniej ocenie przez każdego studenta w następującym formacie:
Srednia ocena dla Imie Nazwisko wynosi: X
gdzie:
Imie Nazwisko
- oznaczają odpowiednio imię i nazwisko studenta pobrane z pliku /etc/passwd
(uwaga: nie login jak to jest w pliku wejściowym).
X
- wartość średniej oceny z dokładnością do dwóch miejsc po przecinku.
Napisany skrypt nie może używać żadnych poleceń zewnętrznych.
Przykłady plików: wejściowego oraz wyjściowego.