Mam takie dwa zadanka; napisałam jakieś skrypty, ale nie do końca działają. :(
Zad.1
Plik zawiera listę studentów z wynikami ćwiczeń w formacie:
Imię_1 Nazwisko_1 Numer_1 wynik_1
Imię_2 Nazwisko_2 Numer_2 wynik_2
Imię_3 Nazwisko_3 Numer_3 wynik_3
...
Może występować wiele wyników dla każdego studenta, jednak dany student ma zawsze ten sam numer. Napisz skrypt w awk-u obliczający i wyświetlający na wyjściu dla każdego studenta: imię, nazwisko, numer, liczbę znalezionych wyników, wynik sumaryczny, wynik średni, oraz wynik średni obliczony z pominięciem najniższego i najwyższego.
No to napisałam coś takiego:
awk '
{
k = $1 OFS $2 OFS $3 # OFS
c[k]++; d[k] = $NF
suma[k]=suma[k]+$4
maks[k]=(maks[k]>$4)?maks[k]:$4
min[k]=(min[k]<$4)?min[k]:$4
}
END {
for (k in c)
print k, c[k], suma[k], suma[k]/c[k], (suma[k]-maks[k]-min[k])/(c[k]-2)
} ' pliczek
Tak wygląda mój plik "pliczek":
Imie_1 Naz_1 Nr_1 8
Imie_2 Naz_2 Nr_2 1
Imie_3 Naz_3 Nr_3 9
Imie_1 Naz_1 Nr_1 6
Imie_2 Naz_2 Nr_2 3
Imie_1 Naz_1 Nr_1 4
Imie_3 Naz_3 Nr_3 5
__Wszystko by było fajnie, tylko minimum nie chce działać i nie mam pojęcia dlaczego. __
Zad.2
Plik zawiera listę studentów w formacie takim jak w zad.1
Napisz skrypt w awk-u sprawdzający, czy wszystkie wiersze zawierające ten sam numer w polu 3 mają dokładnie to samo imię i nazwisko w polach 1 i 2. Na wyjściu należy wyświetlić wszystkie wiersze z wejścia (bez zmian), oraz dodatkowy komunikat dla każdego wiersza, który zawiera numer, który wcześniej wystąpił z innym imieniem i/lub nazwiskiem.
Umiem tylko zliczyć takie same wiersze; nie mam pojęcia jak to polecenie ugryźć. Mam na razie coś takiego:
awk 'END {
for (k in c)
print k, c[k]
}
{
k = $1 OFS $2 OFS $3 # OFS
c[k]++; d[k] = $NF
}' pliczek
Proszę o jakieś wskazówki, bo ze skryptami się znamy od niedawna. :)
Pozdrawiam
Cherry_Lips