#####
##### Cviceni
#####
# $$   - PID aktivniho shellu
# $!   - PID posledniho procesu spusteneho na pozadi

cat >spim.sh <<KONEC
#!/bin/sh
sleep 100
KONEC
chmod +x spim.sh

./spim.sh
# prerusi prave bezici proces
# ctrl+z

# pokracuje s prerusenym proces na pozadi
bg

# pokracuje s prerusenym (nebo na pozadi bezicim) procesem na popredi
fg

# pocka na dokonceni vsech synovskych procesu bezicich na pozadi
wait

#
# eval
# 
# - vyhodnoti prikaz, ktery dostane jako argument
# - vyssi level abstrakce, umoznuje stavet programy programaticky
# 	=> tzn mame data (argument ktery predame evalu) a s nimi je zachazeno jako s programem
# - pouzivat, jen pokud mame dobre rozmysleno, ze je to ok (e.g. neco se udela mnohem snadneji)

foo=10 x=foo
y='$'$x
echo "$y"
eval 'y=$'"$x"
echo "$y"

# eval je silny & uzitecny & hodne nebezpecny konstrukt
# e.g. hrozi shell-injection (jako SQL-injection)


#
# AWK
#
# odkazy na materialy na webu, cheatsheet a oneliners (+ slajdy, tutorial)
# motivace :
#  - super filtr
#  - fakt uzitecny domain specific language
#  - primocary parsovani vstupu po sloupcich
#  - asociativni pole!!!
#  - matematicky funkce
#  - string funkce
#  - pozor, nektere uzitecne funkce jsou GNU rozsireni (toupper, tolower, ..)


# format souboru:
# JMENO MZDA_NA_HODINU POCET_ODPRACOVANYCH_HODIN
wget http://j2m.cz/~jm/vyuka/unix2016/emp.data

# vypsat vse
cat emp.data | awk '{print}'     # default pattern je match all
cat emp.data | awk '1'            # default akce je print

# pozor, tohle nevypise nic
cat emp.data | awk ''

# vypsat soubor s hlavickou
cat emp.data | awk 'BEGIN { print "JMENO\tMZDA\tHODINY" } ; 1'

# vypsat sude radky 
cat emp.data | awk '(NR %2 ) == 0'
cat emp.data | awk '! (NR %2 )'

# vypsat jmeno a plat u lidi co pracovali aspon hodinu
cat emp.data | awk '$3 > 0 { print $1, $2 * $3 }'

# nepracujici
cat emp.data | awk '$3 == 0 { print $1 }'

# vypsat jmeno a plat u lidi co vydelali vic jak 50$
cat emp.data | awk '$2 * $3 > 50 { print $1, $2 * $3 }'

# nasimulovat nl (resp cat -n)
cat emp.data | awk '{ print NR, $0 }'

# nasimulovat wc -l
cat emp.data | awk 'END { print NR }'

# vypsat jmena lidi (s ulozenim v promenne)
cat emp.data | awk '{lidi = lidi " " $1 } ; END { print lidi }'

# vypsat jmena lidi (s ulozenim v promenne) bez mezery na zacatku
cat emp.data | awk 'NR == 1 {lidi = $1 }
                    NR >=1 {lidi = lidi " " $1 }
                    END { print lidi }'

# /etc/passwd  
# 5-ty sloupec na UPPERCASE

cat /etc/passwd | awk 'BEGIN { FS=":" ; OFS=":" }
                       { $5 = toupper($5); print }'

# vypsat avg plat pro lidi co vydelavaji vic jak 6$ / h
# !! pozor na deleni nulou (chceme hezkou chybovou hlasku)
cat emp.data | awk '$2 > 6 { n++ ; sum += $2 * $3 ; }
                    END {
                        if ( !n ) {
                            print "zadny user s mzdou > 6$"
                        } else {
                            print "avg mzda je " sum/n
                        }
                     }'

