Advertisement
zielony_rv

AWK

Nov 20th, 2019
3,102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 2.58 KB | None | 0 0
  1.  
  2. //////////////////////////////////////////////////////////
  3.  
  4.  
  5. 3. (2 punkty - na zajęciach, lub 1 punkt - w domu)
  6. Plik zawiera listę studentów w formacie:
  7.  
  8. Imię_1 Nazwisko_1 Numer_1 punkty inne informacje ...
  9. Imię_2 Nazwisko_2 Numer_2 punkty inne informacje ...
  10. Imię_3 Nazwisko_3 Numer_3 punkty inne informacje ...
  11. (itd.)
  12. Napisz w awku skrypt sumuj.awk sumujący punkty przyznane studentom. Studentów należy identyfikować według numeru w polu 3, i po każdym napotkanym wierszu dotyczącym danego studenta, sumować zebrane punkty.
  13.  
  14. Po zakończeniu przetwarzania pliku wejściowego, należy wyświetlić listę studentów, wraz z sumaryczną liczbą punktów.
  15.  
  16. Wskazówka: należy użyć tablic awka. Te tablice mogą być indeksowane dowolnymi danymi (np. numerami indeksu studentów) i nazywane są tablicami asocjacyjnymi. Warto przejrzeć kilka przykładów użycia tablic asocjacyjnych w awku.
  17.  
  18. Wynikowy skrypt dołączony do raportu powinien zawierać czysty program awk wywoływany poleceniem awk -f sumuj.awk
  19.  
  20.  
  21. ==============================
  22. BEGIN{
  23.   suma = 0
  24. }
  25.  
  26. {
  27.   suma += $4
  28.   tab[$3] = $1 " " $2
  29. }
  30.  
  31. END{
  32.   print "Suma punktów: " suma
  33.   for (i in tab)
  34.     print tab[i]
  35. }
  36. ===============================
  37.  
  38. ===============================
  39. Jan Kowalski    1   5   blabla
  40. Piotr   Nowak       2   3   blabla
  41. Tomasz  Michalik    3   2   blabla
  42. ===============================
  43.  
  44. //////////////////////////////////////////////////////////
  45.  
  46.  
  47. 4. (2 punkty - w domu)
  48. Dla pliku danych z wynikami studentów jak w poprzednim zadaniu, napisz w awku skrypt sprawdzaj.awk do sprawdzenia zgodności imion i nazwisk. Jako identyfikator traktujemy numer w trzecim polu. Skrypt ma sprawdzać, czy każde kolejne wystąpienie wiersza z tym samym numerem ma imię i nazwisko (pierwsze dwa pola) takie samo jak poprzednio. Gdy tak jest, skrypt nie wyświetli nic na wyjściu. Jednak gdy napotkamy wiersz, z wcześniej już przetworzonym numerem, ale z różniącym się imieniem lub nazwiskiem, należy wyświetlić komunikat informacyjny, identyfikujący numer wiersza (zmienna NR w awk).
  49.  
  50. Wynikowy skrypt dołączony do raportu powinien zawierać czysty program awk wywoływany poleceniem awk -f sprawdzaj.awk
  51.  
  52.  
  53. ==============================
  54. BEGIN{
  55. }
  56. {
  57.   if ($3 in tab){
  58.     if(tab[$3] != $1 " " $2){
  59.       print $NR-1
  60.     }
  61.   }
  62.  
  63.   else{
  64.     tab[$3] = $1 " " $2
  65.   }
  66.  
  67. }
  68. ===============================
  69.  
  70. ===============================
  71. Jan Kowalski    1   5   blabla
  72. Piotr   Nowak       2   3   blabla
  73. Tomasz  Michalik    3   2   blabla
  74. Jan Nowacki     1   5   blabla
  75. ===============================
  76. ===============================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement