======UNIX - awk======
====Externi odkazy====
[[http://www.well.ox.ac.uk/~johnb/comp/awk/awk.html|uvod do awk]]\\
[[http://www.ibm.com/developerworks/linux/library/l-awk1/index.html|AWK na DW]]\\
[[https://www.linkedin.com/learning/awk-essential-training?storeRef=voyager_feed_cymbii_learning&trk=n-feed-course-learning|maly kurz (en)]]\\
====Prepinace====
-F"\t" ... nastavi Field Separator na tabulator (vstupni oddelovac)\\
-v LANG=$LANG ... prevede systemovou promennou LANG na promennou v awk\\
-f prikazy_awk.txt ... spusti prikazy awk ze souboru prikazy_awk.txt\\
====Promenne====
NR .. Number of Rows - pocet radku\\
NF ... Number of Fields - pocet slov na radku\\
RS ... Record Separator - znak oddelujici radky\\
RT ... Record Terminator - znak ukoncujici zaznamy,br>
OFS ... Output Field Separator - oddelovac slov na radku na vystupu\\
FS ... Field Separator - na vstupu, definuje se i prepinacem -F\\
ORS ... Output Rows Separator - Oddelovac radku\\
ENVIRON["HOME"] ... hodnota promenne $HOME z prostredi\\
IGNORECASE=1 ... Hodnota, nastavujici, ze se budou ignorovat rozdilne velikosti pismen pri hledani\\
PROCINFO["pid"] ... pid procesu\\
====podminky====
if ( podminka ) { prikazy; } else { prikazy; }\\
(podminka)?(prikaz):(prikaz) student-marks
====funkce====
length() = length($0) ... delka retezce\\
rand() ... nahodne cislo v intervalu 0,1\\
toupper() ... prevede na velka pismena\\
tolower() ... prevede na mala pismena\\
match($0,"ss") ... vrati pozici v textu $0, kde se nachazi regularni vyraz "ss"\\
gsub(/a/,"b",$0) ... nahradi v $0 vsechna a za b (nevypise, je treba pouzit print\\
sub(/a/,"b",$0) ... nahradi v $0 prvni a za b (nevypise, je treba pouzit print\\
====Priklady====
[[http://people.cs.uu.nl/piet/docs/nawk/|awk]] ... programovatelny editor textu z stdin do stdout
awk '/^22/ || /^13/' .. jen radky, co zacinaji 22 nebo 13
awk '$1=="1",$1=="10"' .. jen radky co 1. slovo je mezi 1 a 10
awk '!/^#/ && $2 == "162/udp"' /etc/services ... najde radky, ktere nezacinaji znakem # a druhe slovo je 162\\
awk 'FS=":" $2=="mopb4sminim" { OFS=';' ; ORS="\n\n" } { print $5,$6 }' ... vypise 5 a 6 slovo z radku oddelene strednikem, kazdy radek oddeleyny 2 entrama, kde 2. slovo je mopb4sminim, oddelovac slov je :
awk 'BEGIN { print "Counting of 'mopb4sminim'" } /mopb4sminim/ { ++aaa } END { print "'mopb4sminim' appears " aaa " times" }' ... secte vyskyty slova mopb4sminim
awk ' {split($1,TAB,".");printf("%s.ini",TAB[1]) }' ...\\
awk -F"\"" ' { print $2 } ' ... napise 2 slovo, kde oddelovac je "\\
echo "12345678" | awk '{ print substr($0,2,3) }' vypise 2. az 2+3 pismeno: 234\\
awk ' { printf("%s%s%s",substr($1,2,1),substr($1,4,1),substr($1,6,1)) } '\\
awk ' $0~"java" { for (i=1; i<=NF; i++) if ($(i) ~ "app-name") print substr($(i),12,20) }' ... na radcich obsahujici "java" vypise slova, kde se nachazi "app-name", ale jen 12-32 znak\\
awk -F"," { printf ("%s.%s\n",$2,$3) } ... vypise 2 a treti pole oddelene ve zdroji carkou a ve vystupu teckou a odentruje\\
awk '{if ($0 ~ /-W/) sub(/AA/,"CONFIG",$0)}1' ... pokud radek obsahuje retezec -W pak nahrad prvni vyskyt AA na CONFIG\\
awk '{ if (NF > 1) print $(NF-1),$NF ; else print $NF; }' ... vytiskne posledni 2 slova na radku\\
awk 'NR == 22' ... bypise radek 22\\
awk '$1 !~ /^#/ && $0 ~ /[^ ]/ {print $2+$3+$4,"\t",$1}' filename.txt ... precte soubor, ignoruje radky, ktere zacinaji mezerou ci mrizkou a secte 2. 3. a 4. hodnotu kazdeho radku\\
awk 'ORS=NR%3?",":"\n"' student-marks ... zmeni na oddelovac radku - carku, na enter\\
awk '/^\[DEFAULT\]/{f=1;}f && /^maxretry =/{print "maxretry = "x;f=0;next}1' x=$NUMBER_OF_RETRIES file ... editace konfigu --- po sekci [DEFAULT] se zameni prvni vyskyt\\