Awk 1 day course
-
Upload
damir-delija -
Category
Education
-
view
153 -
download
5
description
Transcript of Awk 1 day course
![Page 1: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/1.jpg)
S92 / 1
awk
trajanje: 1 dan
priredili:
Rajnović Damir
Delija Damir
verzija 1.0Kolovoz 1998.
![Page 2: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/2.jpg)
S92 / 2
S91 Operacijski sustav UNIX
S92 UNIX sistemska administracija
S93 TCP/IP
S94 Sistemska administracijamrežnih aplikacija
S95 Sigurnost računala i mreža
![Page 3: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/3.jpg)
S92 / 3
Ciljevi tečaja
• upoznati se sa awk jezikom i alatima
• osposobiti se za samostalni rad sa awk jezikom
![Page 4: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/4.jpg)
S92 / 4
Područja
• Pregled awk jezika• Primjeri korištenja awk jezika
![Page 5: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/5.jpg)
S92 / 5
Potrebno predznanje
• Korisnički rad sa UNIX-om• Poznavanje shell-a• Poznavanje UNIX-a utilities
![Page 6: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/6.jpg)
S92 / 6
Uvod15 min
Upoznavanje awk-a 30 min
PauzaUpoznavanje awk-a 45
minPauzaUpoznavanje awk-a 45
minPauzaUpoznavanje awk-a 45
minRučak
Primjeri awk koda90 min
SadržajDan 1
![Page 7: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/7.jpg)
S92 / 7
Što nećete naučiti na tečaju
• Puno toga!• Nećete dobiti gotove
‘recepte’ za sve vaše probleme
![Page 8: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/8.jpg)
S92 / 8
Izvori
• Awk & Sed, O’Reilly & Associates, inc.• SunOS dokumentacija• OSF1 dokumentacija,
![Page 9: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/9.jpg)
S92 / 9
Uvod
awk• promjena podataka• jezik za generiranje izvještaja• jezik za pisanje interpretiranih filter program
![Page 10: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/10.jpg)
S92 / 10
awk - opis
SINOPSISawk [-F string][-f prog][-v var=value][program]var=value][file]
OPIS• awk je jezik za obradu datoteka, podesan za manipuliranje i
dohvat podataka iz ASCII datoteka.
• Datoteke navedene u komadnoj liniji se koriste kao ulazni podaci za awk, inače awk čita podatke sa standardnog ulaza (konvencija filter programa)
![Page 11: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/11.jpg)
S92 / 11
awk program
• awk program se sastoji iz proizvoljnog broja definiranih funkcija i pravila oblika:
pattern {action}
• Prije izvođenja programa kod se prevodi !
![Page 12: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/12.jpg)
S92 / 12
awk program
Begin { akcija }
END { akcija }
uzorak1{ akcija }
uzorak2 { akcija }
ulazni podaci
linija teksta$0, $1, $2 ... $NF
ispis rezultata
![Page 13: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/13.jpg)
S92 / 13
Pokretanje awk programa
Postoje dva načina pokretanja awk programa
• Sa komandne linije program zadan kao komanda ljuske, obično u
zatvorena u apostrofe ('), da bi se izbjegla ekspanzija parametara
awk ‘{ print $2 }‘
• Korištenjem -f prog opcije awk-aawk -f prog1.awk
![Page 14: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/14.jpg)
S92 / 14
awk opcije
-F stringdefinira string kao separator polja
-f progako ima više -f opcija u komandnoj liniji svi
programi se spajaju u jedan prije izvođenja-v var=value
dodjeljuje varijabli var vrijednost var prije izvođenja programa.
awk -v v1=10 -f prog datafile
![Page 15: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/15.jpg)
S92 / 15
Inicijalizacija varijabli sa komandne linije
var=valueawk -f progfile a=1 f1 f2 a=2 f3
postavlja a na 1 prije čitanja iz datoteka f1 i f2, te postavlja a na 2 prije čitanja iz datoteke f3
• Inicijalizacija varijabli navedenih prije prove datoteke u komadnoj liniji događa se odmah nakon izvođenja BEGIN pravila u programu.
• Inicijalizacija varijabli navedenih poslije zadnje datoteke u komadnoj liniji događa se prije izvođenja END pravila u programu.
![Page 16: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/16.jpg)
S92 / 16
Varijable
Tipovi varijabli u awk-u:• identifikatori
– Identifikator je niz slova i brojeva te _, a ne smiju početi sa brojem
• polja elemenata– Polja su asocijativna polja oblika
identifier[subscript]=value
• awk varijable ne treba ni deklarirati ni inicijalizirati. Vrijednost se automatski postavlja na “” (prazni string)
![Page 17: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/17.jpg)
S92 / 17
Izrazi
• Izrazi u awk se sastoje iz:• konstatni, varijabli, funkcija, • regularnih izraza, • `subscript in array' uslova
vezanih operatorima.
• Varijable i izrazi imaju string vrijednost i numeričku vrijednost, kontekst odlučuje sto se koristi
![Page 18: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/18.jpg)
S92 / 18
String konstante posebnog značenja
\a audible bell\b backspace\f formfeed\n newline\r carriage return\t horizontal tab\v vertical tab
\ooo octal value oooxdd hexadecimal value dd\" quote\c any other character c
![Page 19: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/19.jpg)
S92 / 19
Konstante
• Brojčane konstante su niz dekadskih znamenkia=123.5
• String konstante su navedene u navodnicima
a=“ima i nema 12.3”
![Page 20: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/20.jpg)
S92 / 20
Symbol Table
Symbol table se može dohvatiti kroz ugrađeno polje SYMTAB.
SYMTAB[expr]• je isto što i varijabla čije ime daje expr
SYMTAB["var"] • je sinonim za varijablu var.
![Page 21: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/21.jpg)
S92 / 21
Environment
• awk program može doseći environment pomoću ENVIRON polja
ENVIRON[name] = value
Primjer: Ispis je isti kao i za komadu env(1):
BEGIN {for (i in ENVIRON)
printf("%s=%s\n", i,ENVIRON[i])exit
}
![Page 22: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/22.jpg)
S92 / 22
Ugrađene varijable ARGV i ARGC
• ARGV polje sadrži argumente komandne linije
• ARGC broj argumenata komandne linije
![Page 23: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/23.jpg)
S92 / 23
Operatori
• awk koristi standardnu hijerarhiju matematičkih operatora
• ako dva izraza nisu odvojena operatorom, awk ih povezuje kao jedan string.
a1 b2 Þ a1b2
![Page 24: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/24.jpg)
S92 / 24
Uvjetno izvođenjeuvjetni operator
expr ? expr1 : expr2
• vraća expr1 ako je expr istina, inače vraća expr2• istina je sve različito od 0 ili “”
![Page 25: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/25.jpg)
S92 / 25
Posebni operatoriregularni izrazi
`~' daje 1 ako regularni izraz na lijevoj strani odgovara desnoj strani
`!~' daje 1 ako regularni izraz na lijevoj strani ne odgovara desnoj strani
$2 ~ /[0-9]/selektira sve linije u kojima drugo polje sadrži bar jednu
znamenku
![Page 26: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/26.jpg)
S92 / 26
Pridruženje vrijednosti varijabli
• varijabla var poprima vrijednost izraza expr
var = expr
var op= expr je isto što i var = var op expr
a=b+0 forsira numeričko izračunavanje
a=a+0 forsira a kao broj
s=s”” forsira s kao string
![Page 27: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/27.jpg)
S92 / 27
Hijerarhija operatoraV[a] operacija sa poljimaV++ V-- ++V --V increment, decrementA^B eksponentA -A !A unary plus,unary minus,logički NOTA*B A/B A%B množenje, dijelenje, ostatakA+B A-B zbrajanje, oduzimanjeAB spajanje stringovaA<B A>B A<=BA>=BA!=B A==B uspoređivanjeA~B A!~B regularni izraziA in V pripadnost poljuA && B logički AND A || B logički ILI A ? B : C uslovno izvođenjeV=B V+=B V-=B aritmetičke operacije
![Page 28: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/28.jpg)
S92 / 28
Ulaz - (input)
• awk dijeli ulaz (input) u zapise ili linije (records)
RS daje trenutni znak odjeljivač zapisa (record separator character)
RS=\n
• awk dijeli zapise u riječi $1 ..... $N
$i je i-ta riječ u tekućem zapisu
$0 je cijeli zapis, tekuća linija ulaza
FS daje tekuće znakove za odjeljivanje riječi u liniji
FS = "[,:$]" zarez,dvotočka,$ su separatori za riječi u liniji
![Page 29: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/29.jpg)
S92 / 29
Ulaz - dodatne varijable
NF daje broj riječi u tekućoj liniji
NR daje broj linja pročitanih do sada
FILENAME daje ime datoteke iz koje se čita tekući zapis
FNR daje broj linja pročitanih do sada iz tekuće datoteke
![Page 30: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/30.jpg)
S92 / 30
getline
getline čita vrijednost $0 iz:– tekućeg ulaza,– datoteke,– ili pipe.
Rezultat getline je broj– 0 uspjeh,– 1 end-of-file, – -1 greška
![Page 31: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/31.jpg)
S92 / 31
Format getline
getlinečita liniju i podešava sve varijable ($i,NF, NR,FNR)
getline varčita liniju i stavlja je u var, ne dijeli je u $i, ali podešava NR i FNR
getline <exprčita liniju iz datoteke čije je ime expr, podešava varijable $i,NF
getline var <exprčita liniju iz datoteke čije je ime expr u varijablu var, ne dijeli je u $i
![Page 32: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/32.jpg)
S92 / 32
getline i pipesexpr | getline
čita linije iz pipea koji nastaje izvođenjem expr, radi kao getline <expr.
expr | getline varčita linije iz pipea koji nastaje izvođenjem expr,
radi kao getline var <expr
Datoteke i pipeovi se zatvaraju sa komandom close
close(expr)
![Page 33: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/33.jpg)
S92 / 33
Ugrađene matematičke funkcije
int(expr)
exp(expr), log(expr), sqrt(expr)
sin(expr), cos(expr)
atan2(expr1, expr2)
![Page 34: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/34.jpg)
S92 / 34
Ugrađene string funkcijeAko se ispuste argumenti koristi SE $0, i FS varijabla
len = length(expr)n = split(string, array, regexp)str = substr(string, offset, len)pos = index(string, str)pos = match(string, regexp)n = sub(regexp, repl, string)n = gsub(regexp, repl, string)str = sprintf(fmt, expr, expr...)n = ord(expr)str = tolower(expr)str = toupper(expr)
![Page 35: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/35.jpg)
S92 / 35
Funkcija system
system funkcija izvodi vanjsku komandu expr i vraća rezultat
status = system(expr)
system("tail " $1)
![Page 36: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/36.jpg)
S92 / 36
Korisnički definirane funkcijefunction name(parameter-list) {
statements}
• Definicija funkcije može biti bilo gdje u tijelu programa • Lista parametara se sastoji iz varijabli odvojenih zarezom, to su ujedno
i lokalne varijable za funkciju. • Sve ostale varijable navedene u funkciji su globalne• Skalarni argumenti se prenose po vrijednosti, a polja po referenci • Funkcija se vraća na return komandu ili nakon izvođenja svoje zadnje
komande
![Page 37: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/37.jpg)
S92 / 37
Uzorci i akcije( patterns & actions)
uzorak { komanda; komandakomanda
}• uzorak (pattern) je regularni izraz, poseban pattern, raspon ili
aritmetički izraz
• akcija je niz komandi koje završavaju sa ; \n }
• ako je uzorak ispušten, linija se uvijek izvodi!
![Page 38: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/38.jpg)
S92 / 38
Posebni uzorci
BEGIN
definira akcije koje se izvode prije čitanja ulaznih podataka
ENDdefinira akcije koje se izvode poslije čitanja ulaznih podataka
pattern1,pattern2 raspon uzoraka (pattern range), hvata sve linije koje zadovoljavaju uzorke od pattern1 do pattern2 uključivo
![Page 39: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/39.jpg)
S92 / 39
IF - THEN - ELSE
# if statement AKO TADA INAČE
if (condition){statement
} else {statement
}
![Page 40: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/40.jpg)
S92 / 40
Komentar
# znak u liniji, komentar je sve do kraja linije
komanda ;# za komentar u istoj liniji sa komandama
![Page 41: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/41.jpg)
S92 / 41
Petlje (loops)
while
do
for
![Page 42: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/42.jpg)
S92 / 42
while
# while loopwhile (uslov) {
komanda}
• odvija se sve dok je uslov istina (!= 0)
![Page 43: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/43.jpg)
S92 / 43
do-while
# do-while loopdo {
komanda} while (uslov)
• odvija se dok je uslov laž!
![Page 44: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/44.jpg)
S92 / 44
for za asocijativna polja
# forfor (i in polje) {
komanda}• awk izvodi komandu za svaki element polja, i sadrži novi
indeks • ako je polje višedimenzionalno i je dan kao jedan string,• znak definiran u SUBSEP se može koristiti za odjeljivanje
podindeksa za višedimenzionalna polja
![Page 45: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/45.jpg)
S92 / 45
for
# for petlja, klasična c for petljafor (expr1; cond; expr2) {
statement}• expr1 početno stanje brojača u petlji• cond petlja radi dok je cond istina• expr2 uvećavanje brojača
![Page 46: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/46.jpg)
S92 / 46
Komande za kontrolu petlji
breakprekida while petlju
continueprekida tekuću iteraciju petlje i poćinje novu
nextprekida oradu tekuće ulazne linije i odmah nastavlja sa procesiranjem nove ulazne linije
![Page 47: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/47.jpg)
S92 / 47
exit
exit [(expr)]
• prelazi na END uzorak i vraća iz programa rezultat expr izraza, (def. 0)
![Page 48: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/48.jpg)
S92 / 48
return
return [expr]
• vraća program iz funkcije, rezultat je expr
![Page 49: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/49.jpg)
S92 / 49
delete
delete array[i]array[i]=“”
• briše i-ti element iz polja array
![Page 50: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/50.jpg)
S92 / 50
print, printf
print expr, expr, ...• štampa argumente • ako nema argumenata štampa $0
printf fmt, expr, expr, ...printf (fmt, expr, expr, ...)• štampa argumente expr prema formatu fmt• radi kao C printf format
![Page 51: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/51.jpg)
S92 / 51
Izlaz
ORS nakon svakog ispisa stavlja Output Record Separator (def ORF=“ \n”)
OFS Output Field Separator odvaja pojedina polja u ispisu (def OFS=“ “)
OFMT daje def. format za ispis floating point brojeva za print komandu. (def OFMT=`%.6g’ )
![Page 52: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/52.jpg)
S92 / 52
Redirekcija izlaza u datoteku
print > exprprintf fmt,expr1 ...exprn > expr• awk uzime string vrijednost expr kao ime datoteke u koju piše izlaz
print >>expr dodavanje na kraj datoteke• razlika `>' i `>>' je važna samo kod prvog pisanja u datoteku!
![Page 53: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/53.jpg)
S92 / 53
Redirekcija izlaza u pipe
print |expr
• awk uzima string vrijednost od expr kao ime komande u koju usmjeri pipe
![Page 54: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/54.jpg)
S92 / 54
Inačice awk-a
• awk standardni awk• nawk new awk• gawk gnu awk (ima i date&time funckije)
• kompajler za awk• MSwindows (NT,95,98 3xx), DOS• awk to perl kompajler
![Page 55: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/55.jpg)
S92 / 55
Pauza Ručak
![Page 56: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/56.jpg)
S92 / 56
Praktičan rad i primjeri
![Page 57: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/57.jpg)
S92 / 57
Ispis i brojenje linija datoteke
awk '{print NR SEP $0}' SEP=":" input1awk '{print NR ":" $0}' input1
• Primjer ispisuje linije datoteke input1 i ispred svake piše njen redni broj
![Page 58: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/58.jpg)
S92 / 58
Pozivanje programa -f opcijom
• awk izvodi program iz addline.awk:
awk -f addline.awk input1
• Isti rezultat navođenjem koda u programskoj liniji isto kao i pozivanje addline.awk
awk ‘{print NR ":" $0}’ input1
![Page 59: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/59.jpg)
S92 / 59
Primjena uzoraka
• Ovaj program sve ulazne linije koje počinju sa `January' piše u datoteku jan (koja može i ne mora postojati), a sve linije koje počinju sa `February' ili `March' piše u datoteku febmar.
/^January/ {print >> "jan"}
/^February|^March/ {print >> "febmar"}
![Page 60: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/60.jpg)
S92 / 60
Sumiranje i statistike ulaza
• Ovaj program računa ukupan broj učitan riječi u tekstu i srednju dužinu linije teksta po broju riječi
{s += $NF}
END{print "sum is",s,"average is",s/NR}
![Page 61: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/61.jpg)
S92 / 61
Zamjena redoslijeda polja u ulazu
• Program zamjenjuje redoslijed prvog i drugog polja u ulazu
{tmp = $1$1 = $2$2 = tmpprint
}
![Page 62: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/62.jpg)
S92 / 62
Korištenje printf komande
• Program umeće brojeve linija. Brojevi su lijevo poravnani
{printf "%-6d: %s\n", NR, $0}
![Page 63: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/63.jpg)
S92 / 63
Štampanje ulaza u obratnom redoslijedu
• Program štampa ulaz u obratnom redoslijedu, koristeći polje (veliki utrošak memorije)
{a[NR] = $0; #index using record number }
END {for (i = NR; i>0; --i)print a[i]
}
![Page 64: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/64.jpg)
S92 / 64
Brojenje linija po nekom ključu
• Broje se linije koji imaju istu prvu riječ
#array indexed using the first field{ ++a[$1]}
#note output will be in undefined orderEND {
for (i in a)print a[i], "lines start with", i
}
![Page 65: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/65.jpg)
S92 / 65
Brojenje linija po ulaznim datotekama
• Broje se linije za svaku ulaznu datoteku
{ ++a[FILENAME] }END {
for (file in a)if (a[file] == 1)
print file, "has 1 line"else
print file, "has", a[file], "lines”}
![Page 66: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/66.jpg)
S92 / 66
Korištenje dvodimenzionalnih polja u awk-u (I)
• Za ulazne podatke provo polje je broj produkta, drugo polje je mjesec, a treće polje količinu. Program generira tabelu koliko je čega bilo u kom mjesecu
Jan Feb Mar1#2#
![Page 67: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/67.jpg)
S92 / 67
Korištenje dvodimenzionalnih polja u awk-u (II)
BEGIN { NUMPROD = 5 }{array[$1,$2] += $3 }END {
print "\t Jan\t Feb\tMarch\tApril\t May\t" \"June\tJuly\t Aug\tSept\t Oct\t Nov\t Dec”for (prod = 1; prod <= NUMPROD; prod++) {
printf "%-7s", "prod#" prodfor (month = 1; month <= 12; month++){
printf "\t%5d",array[prod,month]}printf "\n"
}}
![Page 68: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/68.jpg)
S92 / 68
Korištenje funkcija (I)
• Program inicijalizira polje u memoriji koristeći slučajne brojeve. • Na osnovi unosa dvaju polja (koristi ih kao koordinate) utvrđuje da li je došlo
do pogotka ili ne. • Za inicijaliziranje se koristi funkcija, definirana na početku koda.
![Page 69: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/69.jpg)
S92 / 69
Korištenje funkcija (II)
function randint(){return (int((rand()+1)*10))}
BEGIN {prize[randint(),randint()] = "$100";prize[randint(),randint()] = "$10”;prize[1,1] = "the booby prize”
}{
if (($1,$2) in prize)printf "You have won %s!\n", prize[$1,$2]
}
![Page 70: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/70.jpg)
S92 / 70
Obratno štampanje sadržaja linije
• Programa štampa linije koje imaju isto prvo i zadnje polje, a polja u liniji štampa od zadnjeg prema prvom
$1==$NF {for (i = NF; i > 0; --i)
printf "%s", $i(i>1 ? OFS : ORS)}
![Page 71: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/71.jpg)
S92 / 71
Rekurzija
Računanje faktorjela rekurzivnim pozivima
f(x)=x * f(x-1), x > 1, f(1)=1
function f (num) {if (num <= 1)return 1else return num * f(num - 1)
}{ print $0 " factorial is " f($0) }
![Page 72: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/72.jpg)
S92 / 72
Getline & pipe (I)
Čitanje podataka iz pipe-a i njihova obrada u awk-u
function words(file, string) {string = "wc " fnstring | getlineclose(string)return ($2)
}
![Page 73: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/73.jpg)
S92 / 73
Getline & pipe
BEGIN {for (i=1; i<ARGC; i++) {fn = ARGV[i]printf "There are %d words in %s.", \
words(fn), fn}
}
![Page 74: Awk 1 day course](https://reader036.fdocument.pub/reader036/viewer/2022062405/55839188d8b42a9e528b4e2c/html5/thumbnails/74.jpg)
S92 / 74
Pitanja
?