# Úvod do UNIXu (SWI095x1h), 12. cvičení, 2005-05-18
# SU1, Malá Strana, MFF UK
#
# Řešení jsou odladěná na FreeBSD 4.11-RELEASE, případné konkrétní situace
# se týkají stroje mail.kolej.
#
# $DevNullCZ: cviceni-12.reseni.txt,v 1.1 2005/05/18 19:18:01 jp Exp $
#

#---------------------------------------------------------------------------
# AWK - NEPOUžÍVEJTE sed, grep, cut, ...
#
# v příkladech budou použity tyto soubory:
#
# http://www.devnull.cz/mff/uvod-do-unixu/emp.data (1. sloupec je jméno
# zaměstnance, 2. je hodinová mzda, 3. je počet odpracovaných hodin; soubor
# převzat z klasické knihy "Aho, Kernighan, Weinberger: The AWK Programming
# Language")
#---------------------------------------------------------------------------

(a1) základní informace, historie, struktura AWK programu, patterns/actions,
datové typy, BEGIN/END, pole ve vstupních řádkách, built-in proměnné,
syntaxní analýza programu, ...

(a2) vypište soubor emp.data


(a3) vypište jména a celkový plat těch zaměstnanců, kteří odpracovali
alespoň jednu hodinu. Jako další příklad pak vypište naopak jen jména
zaměstnanců, kteří nepracovali.


(a4) pro každého zaměstnance vypište počet slov na příslušné řádce (zde tedy
budou čísla stejná). Příklad na built-in proměnnou "NF".


(a5) před každou řádku vypište pořadové číslo řádky


(a6) pro každého zaměstnance vypište řádku, jejíž formát bude tento:

total pay for Katy is 40


(a7) vypište takové zaměstnance společně s výší mzdy, kteří si vydělali více
než $50


(a8) vypište řádky souboru emp.data, ale před první řádek vypište tuto
hlavičku a za ní prázdný řádek:

NAME    RATE    HOURS


(a9) vypište pouze jednu řádku, na které budou jména všech zaměstanců; toto
je příklad na spojování řetězců.


(a10) vypište poslední řádku souboru emp.data. Příklad na to, že "$0" jako
proměnná obsahující celou řádku si neponechá svojí hodnotu pro END podmínku.


(a11) vypište průměrný plat zaměstnanců, kteří vydělávají více než $6 za
hodinu. Stejný příklad pak zkuste pro ty, co vydělávají více než $4 za
hodinu. Použijte "if" příkaz pro ochranu dělení nulou.


#---------------------------------------------------------------------------
# AWK 2
#---------------------------------------------------------------------------

(a12) vypište UID/GID z /etc/passwd tak, že bude mezi nimi znak '_'.
Použijte "FS" pro čtení, "next" pro ignorování komentářů.


(a13) vypište ty řádky z /etc/passwd, které obsahují slovo "Jan"


(a14) obraťte řádky souboru


(a15) vypište ty řádky /etc/passwd, které jsou mezi řádky obsahující slova
Friedel a Pechanec.


(a16) pomocí split(,,) zpracujte soubor /etc/passwd tak, že vypíšete login a
jméno uživatele


(a17) pro každý řádek souboru vypište jeho pole každé na vlastní řádek.
Použijte "while".