awk trajanje: 1 dan    priredili:Rajnović Damir  Delija Damir  verzija 1.0 Kolovoz 1998.       S92 / 1
S95   Sigurnost računala i mrežaS94   Sistemska administracija      mrežnih aplikacijaS93   TCP/IPS92   UNIX sistemska adm...
Ciljevi tečaja•   upoznati se sa awk    jezikom i alatima•   osposobiti se za    samostalni rad sa awk    jezikom         ...
Područja•   Pregled awk jezika•   Primjeri korištenja awk jezika                            S92 / 4
Potrebno predznanje•   Korisnički rad sa UNIX-om•   Poznavanje shell-a•   Poznavanje UNIX-a utilities                     ...
Sadržaj                     Dan 1Uvod                            15 minUpoznavanje awk-a               30 minPauzaUpoznava...
Što nećete naučiti na tečaju•   Puno toga!•   Nećete dobiti gotove    ‘recepte’ za sve vaše    probleme                   ...
Izvori•   Awk & Sed, O’Reilly & Associates, inc.•   SunOS dokumentacija•   OSF1 dokumentacija,                           S...
Uvod                              awk•   promjena podataka•   jezik za generiranje izvještaja•   jezik za pisanje interpre...
awk - opis                                SINOPSIS    awk [-F string][-f prog][-v var=value][program]var=value][file]     ...
awk program•   awk program se sastoji iz proizvoljnog broja    definiranih funkcija i pravila oblika:                  pat...
awk program                                                ulazni podaciBegin { akcija }       $0, $1, $2 ... $NF         ...
Pokretanje awk programa      Postoje dva načina pokretanja awk programa• Sa komandne linijeprogram zadan kao komanda ljusk...
awk opcije-F string    definira string kao separator polja-f prog   ako ima više -f opcija u komandnoj liniji svi programi...
Inicijalizacija varijabli sa               komandne linije                       var=value           awk -f progfile a=1 f...
VarijableTipovi varijabli u awk-u:•   identifikatori     – Identifikator je niz slova i brojeva te _, a ne smiju početi sa...
Izrazi•   Izrazi u awk se sastoje iz:        • konstatni, varijabli, funkcija,        • regularnih izraza,        • `subsc...
String konstante posebnog         značenja           a         au d ib le b ell           b         b ack sp ace          ...
Konstante•   Brojčane konstante su niz dekadskih znamenki                        a=123.5•   String konstante su navedene u...
Symbol TableSymbol table se može dohvatiti kroz ugrađeno polje SYMTAB.                                       SYMTAB[expr]•...
Environment•   awk program može doseći environment pomoću ENVIRON polja                  ENVIRON[name] = valuePrimjer: Isp...
Ugrađene varijable              ARGV i ARGC•   ARGV polje sadrži argumente komandne linije•   ARGC broj argumenata komandn...
Operatori•   awk koristi standardnu hijerarhiju matematičkih    operatora•   ako dva izraza nisu odvojena operatorom, awk ...
Uvjetno izvođenje              uvjetni operator                     expr ? expr1 : expr2•   vraća expr1 ako je expr istina...
Posebni operatori                  regularni izrazi`~            daje 1 ako regularni izraz na lijevoj strani      odgovar...
Pridruženje vrijednosti                 varijabli•   varijabla var poprima vrijednost izraza expr                         ...
Hijerarhija operatoraV[a]                 operacija sa poljimaV++ V-- ++V --V      increment, decrementA^B           ekspo...
Ulaz - (input)•   awk dijeli ulaz (input) u zapise ili linije (records)        RS daje trenutni znak odjeljivač zapisa (re...
Ulaz - dodatne varijableNF         daje broj riječi u tekućoj linijiNR         daje broj linja pročitanih do sadaFILENAME ...
getlinegetline čita vrijednost $0 iz:     –          tekućeg ulaza,     –          datoteke,     –          ili pipe.Rezul...
Format getlinegetline  čita liniju i podešava sve varijable ($i,NF, NR,FNR)getline var  čita liniju i stavlja je u var, ne...
getline i pipesexpr | getline   čita linije iz pipea koji nastaje izvođenjem expr, radi kao getline <expr.expr | getline v...
Ugrađene matematičke             funkcijeint(expr)exp(expr), log(expr), sqrt(expr)sin(expr), cos(expr)atan2(expr1, expr2) ...
Ugrađene string funkcijeAko se ispuste argumenti koristi SE $0, i FS varijablalen    =   length(expr)n      =   split(stri...
Funkcija systemsystem funkcija izvodi vanjsku komandu expr i vraća rezultat                         status = system(expr) ...
Korisnički definirane funkcijefunction name(parameter-list) {   statements}•   Definicija funkcije može biti bilo gdje u t...
Uzorci i akcije              ( patterns & actions)uzorak {  komanda; komanda  komanda}•   uzorak (pattern) je regularni iz...
Posebni uzorciBEGIN  definira akcije koje se izvode prije čitanja ulaznih podatakaEND  definira akcije koje se izvode posl...
IF - THEN - ELSE# if statement AKO TADA INAČEif (condition){      statement} else {      statement}                       ...
Komentar#   znak u liniji, komentar je sve do kraja linijekomanda ;# za komentar u istoj liniji sa komandama              ...
Petlje (loops)    while     do     for     S92 / 41
while# while loopwhile (uslov) {  komanda}•   odvija se sve dok je uslov istina (!= 0)                                    ...
do-while# do-while loopdo {  komanda} while (uslov)•   odvija se dok je uslov laž!                                  S92 / 43
for za asocijativna polja# forfor (i in polje) {   komanda}•   awk izvodi komandu za svaki element polja, i sadrži novi in...
for# for petlja, klasična c for petljafor (expr1; cond; expr2) {  statement}•   expr1   početno stanje brojača u petlji•  ...
Komande za kontrolu petljibreak   prekida while petljucontinue   prekida tekuću iteraciju petlje i poćinje novunext  preki...
exitexit [(expr)]•   prelazi na END uzorak i vraća iz programa rezultat expr izraza, (def. 0)                             ...
returnreturn [expr]•   vraća program iz funkcije, rezultat je expr                                 S92 / 48
deletedelete array[i]array[i]=“”•   briše i-ti element iz polja array                                        S92 / 49
print, printfprint expr, expr, ...•   štampa argumente•   ako nema argumenata štampa $0printf fmt, expr, expr, ...printf (...
IzlazORS  nakon svakog ispisa stavlja Output Record Separator  (def ORF=“ n”)OFS  Output Field Separator odvaja pojedina p...
Redirekcija izlaza u datotekuprint > exprprintf fmt,expr1 ...exprn > expr•   awk uzime string vrijednost expr kao ime dato...
Redirekcija izlaza u pipeprint |expr•   awk uzima string vrijednost od expr kao ime komande u koju usmjeri pipe           ...
Inačice awk-a•   awk      standardni awk•   nawk     new awk•   gawk     gnu awk (ima i date&time funckije)•   kompajler z...
PauzaRučak S92 / 55
Praktičan rad i primjeri          S92 / 56
Ispis i brojenje linija datotekeawk {print NR SEP $0} SEP=":" input1awk {print NR ":" $0} input1•   Primjer ispisuje linij...
Pozivanje programa -f opcijom•   awk izvodi program iz addline.awk:     awk -f addline.awk input1•   Isti rezultat navoĎen...
Primjena uzoraka•   Ovaj program sve ulazne linije koje počinju sa `January piše u datoteku    jan (koja može i ne mora po...
Sumiranje i statistike ulaza•   Ovaj program računa ukupan broj učitan riječi u tekstu i srednju dužinu linije    teksta p...
Zamjena redoslijeda polja u               ulazu•   Program zamjenjuje redoslijed prvog i drugog polja u ulazu{    tmp = $1...
Korištenje printf komande•   Program umeće brojeve linija. Brojevi su lijevo poravnani               {printf "%-6d: %sn", ...
Štampanje ulaza u obratnom           redoslijedu•   Program štampa ulaz u obratnom redoslijedu, koristeći polje (veliki   ...
Brojenje linija po nekom                  ključu•   Broje se linije koji imaju istu prvu riječ#array indexed using the fir...
Brojenje linija po ulaznim             datotekama•   Broje se linije za svaku ulaznu datoteku{ ++a[FILENAME] }END {   for ...
Korištenje dvodimenzionalnih         polja u awk-u (I)•    Za ulazne podatke provo polje je broj produkta, drugo polje je ...
Korištenje dvodimenzionalnih      polja u awk-u (II)BEGIN { NUMPROD = 5 }{array[$1,$2] += $3 }END {   print "t Jant FebtMa...
Korištenje funkcija (I)•   Program inicijalizira polje u memoriji koristeći slučajne brojeve.•   Na osnovi unosa dvaju pol...
Korištenje funkcija (II)function randint(){return (int((rand()+1)*10))}BEGIN {   prize[randint(),randint()] = "$100";   pr...
Obratno štampanje sadržaja               linije•   Programa štampa linije koje imaju isto prvo i zadnje polje, a polja u  ...
Rekurzija           Računanje faktorjela rekurzivnim pozivima                f(x)=x * f(x-1),     x > 1, f(1)=1function f ...
Getline & pipe (I)Čitanje podataka iz pipe-a i njihova obrada u awk-ufunction words(file, string) {   string = "wc " fn   ...
Getline & pipeBEGIN {   for (i=1; i<ARGC; i++) {   fn = ARGV[i]   printf "There are %d words in %s.",       words(fn), fn ...
Pitanja ?  S92 / 74
Upcoming SlideShare
Loading in …5
×

Awk 1 day course

174
-1

Published on

Awk 1 day course

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
174
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Awk 1 day course

  1. 1. awk trajanje: 1 dan priredili:Rajnović Damir Delija Damir verzija 1.0 Kolovoz 1998. S92 / 1
  2. 2. S95 Sigurnost računala i mrežaS94 Sistemska administracija mrežnih aplikacijaS93 TCP/IPS92 UNIX sistemska administracijaS91 Operacijski sustav UNIX S92 / 2
  3. 3. Ciljevi tečaja• upoznati se sa awk jezikom i alatima• osposobiti se za samostalni rad sa awk jezikom S92 / 3
  4. 4. Područja• Pregled awk jezika• Primjeri korištenja awk jezika S92 / 4
  5. 5. Potrebno predznanje• Korisnički rad sa UNIX-om• Poznavanje shell-a• Poznavanje UNIX-a utilities S92 / 5
  6. 6. Sadržaj Dan 1Uvod 15 minUpoznavanje awk-a 30 minPauzaUpoznavanje awk-a 45 minPauzaUpoznavanje awk-a 45 minPauzaUpoznavanje awk-a 45 minRučakPrimjeri awk koda 90 min S92 / 6
  7. 7. Što nećete naučiti na tečaju• Puno toga!• Nećete dobiti gotove ‘recepte’ za sve vaše probleme S92 / 7
  8. 8. Izvori• Awk & Sed, O’Reilly & Associates, inc.• SunOS dokumentacija• OSF1 dokumentacija, S92 / 8
  9. 9. Uvod awk• promjena podataka• jezik za generiranje izvještaja• jezik za pisanje interpretiranih filter program S92 / 9
  10. 10. awk - opis SINOPSIS awk [-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) S92 / 10
  11. 11. awk program• awk program se sastoji iz proizvoljnog broja definiranih funkcija i pravila oblika: pattern {action}• Prije izvođenja programa kod se prevodi ! S92 / 11
  12. 12. awk program ulazni podaciBegin { akcija } $0, $1, $2 ... $NF linija teksta uzorak1{ akcija } uzorak2 { akcija } ispis rezultataEND { akcija } S92 / 12
  13. 13. Pokretanje awk programa Postoje dva načina pokretanja awk programa• Sa komandne linijeprogram 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-a awk -f prog1.awk S92 / 13
  14. 14. awk opcije-F string definira string kao separator polja-f prog ako 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 S92 / 14
  15. 15. Inicijalizacija varijabli sa komandne linije var=value awk -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. S92 / 15
  16. 16. VarijableTipovi 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) S92 / 16
  17. 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 S92 / 17
  18. 18. String konstante posebnog značenja a au d ib le b ell b b ack sp ace f fo rm feed n n ew lin e r carriage retu rn t h o rizo n tal tab v v ertical tab o o o o ctal v alu e o o o xdd h ex ad ecim al v alu e d d " q u o te c an y o th er ch aracter c S92 / 18
  19. 19. Konstante• Brojčane konstante su niz dekadskih znamenki a=123.5• String konstante su navedene u navodnicima a=“ima i nema 12.3” S92 / 19
  20. 20. Symbol TableSymbol 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. S92 / 20
  21. 21. Environment• awk program može doseći environment pomoću ENVIRON polja ENVIRON[name] = valuePrimjer: Ispis je isti kao i za komadu env(1):BEGIN { for (i in ENVIRON) printf("%s=%sn", i,ENVIRON[i]) exit} S92 / 21
  22. 22. Ugrađene varijable ARGV i ARGC• ARGV polje sadrži argumente komandne linije• ARGC broj argumenata komandne linije S92 / 22
  23. 23. Operatori• awk koristi standardnu hijerarhiju matematičkih operatora• ako dva izraza nisu odvojena operatorom, awk ih povezuje kao jedan string. a1 b2 a1b2 S92 / 23
  24. 24. Uvjetno izvođenje uvjetni operator expr ? expr1 : expr2• vraća expr1 ako je expr istina, inače vraća expr2• istina je sve različito od 0 ili “” S92 / 24
  25. 25. Posebni operatori regularni 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 S92 / 25
  26. 26. Pridruženje vrijednosti varijabli• varijabla var poprima vrijednost izraza expr var = expr var op= expr je isto što i var = var op expra=b+0 forsira numeričko izračunavanjea=a+0 forsira a kao brojs=s”” forsira s kao string S92 / 26
  27. 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 ANDA || B logički ILIA ? B : C uslovno izvoĎenjeV=B V+=B V-=B aritmetičke operacije S92 / 27
  28. 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 S92 / 28
  29. 29. Ulaz - dodatne varijableNF daje broj riječi u tekućoj linijiNR daje broj linja pročitanih do sadaFILENAME daje ime datoteke iz koje se čita tekući zapisFNR daje broj linja pročitanih do sada iz tekuće datoteke S92 / 29
  30. 30. getlinegetline čita vrijednost $0 iz: – tekućeg ulaza, – datoteke, – ili pipe.Rezultat getline je broj – 0 uspjeh, – 1 end-of-file, – -1 greška S92 / 30
  31. 31. Format getlinegetline č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 FNRgetline <expr čita liniju iz datoteke čije je ime expr, podešava varijable $i,NFgetline var <expr čita liniju iz datoteke čije je ime expr u varijablu var, ne dijeli je u $i S92 / 31
  32. 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 <exprDatoteke i pipeovi se zatvaraju sa komandom close close(expr) S92 / 32
  33. 33. Ugrađene matematičke funkcijeint(expr)exp(expr), log(expr), sqrt(expr)sin(expr), cos(expr)atan2(expr1, expr2) S92 / 33
  34. 34. Ugrađene string funkcijeAko se ispuste argumenti koristi SE $0, i FS varijablalen = 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) S92 / 34
  35. 35. Funkcija systemsystem funkcija izvodi vanjsku komandu expr i vraća rezultat status = system(expr) system("tail " $1) S92 / 35
  36. 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 S92 / 36
  37. 37. Uzorci i akcije ( patterns & actions)uzorak { komanda; komanda komanda}• 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! S92 / 37
  38. 38. Posebni uzorciBEGIN definira akcije koje se izvode prije čitanja ulaznih podatakaEND definira akcije koje se izvode poslije čitanja ulaznih podatakapattern1,pattern2 raspon uzoraka (pattern range), hvata sve linije koje zadovoljavaju uzorke od pattern1 do pattern2 uključivo S92 / 38
  39. 39. IF - THEN - ELSE# if statement AKO TADA INAČEif (condition){ statement} else { statement} S92 / 39
  40. 40. Komentar# znak u liniji, komentar je sve do kraja linijekomanda ;# za komentar u istoj liniji sa komandama S92 / 40
  41. 41. Petlje (loops) while do for S92 / 41
  42. 42. while# while loopwhile (uslov) { komanda}• odvija se sve dok je uslov istina (!= 0) S92 / 42
  43. 43. do-while# do-while loopdo { komanda} while (uslov)• odvija se dok je uslov laž! S92 / 43
  44. 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 S92 / 44
  45. 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 S92 / 45
  46. 46. Komande za kontrolu petljibreak prekida while petljucontinue prekida tekuću iteraciju petlje i poćinje novunext prekida oradu tekuće ulazne linije i odmah nastavlja sa procesiranjem nove ulazne linije S92 / 46
  47. 47. exitexit [(expr)]• prelazi na END uzorak i vraća iz programa rezultat expr izraza, (def. 0) S92 / 47
  48. 48. returnreturn [expr]• vraća program iz funkcije, rezultat je expr S92 / 48
  49. 49. deletedelete array[i]array[i]=“”• briše i-ti element iz polja array S92 / 49
  50. 50. print, printfprint expr, expr, ...• štampa argumente• ako nema argumenata štampa $0printf fmt, expr, expr, ...printf (fmt, expr, expr, ...)• štampa argumente expr prema formatu fmt• radi kao C printf format S92 / 50
  51. 51. IzlazORS 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‟ ) S92 / 51
  52. 52. Redirekcija izlaza u datotekuprint > exprprintf fmt,expr1 ...exprn > expr• awk uzime string vrijednost expr kao ime datoteke u koju piše izlazprint >>expr dodavanje na kraj datoteke• razlika `> i `>> je važna samo kod prvog pisanja u datoteku! S92 / 52
  53. 53. Redirekcija izlaza u pipeprint |expr• awk uzima string vrijednost od expr kao ime komande u koju usmjeri pipe S92 / 53
  54. 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 S92 / 54
  55. 55. PauzaRučak S92 / 55
  56. 56. Praktičan rad i primjeri S92 / 56
  57. 57. Ispis i brojenje linija datotekeawk {print NR SEP $0} SEP=":" input1awk {print NR ":" $0} input1• Primjer ispisuje linije datoteke input1 i ispred svake piše njen redni broj S92 / 57
  58. 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 S92 / 58
  59. 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"} S92 / 59
  60. 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} S92 / 60
  61. 61. Zamjena redoslijeda polja u ulazu• Program zamjenjuje redoslijed prvog i drugog polja u ulazu{ tmp = $1 $1 = $2 $2 = tmp print} S92 / 61
  62. 62. Korištenje printf komande• Program umeće brojeve linija. Brojevi su lijevo poravnani {printf "%-6d: %sn", NR, $0} S92 / 62
  63. 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]} S92 / 63
  64. 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} S92 / 64
  65. 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”} S92 / 65
  66. 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# S92 / 66
  67. 67. Korištenje dvodimenzionalnih polja u awk-u (II)BEGIN { NUMPROD = 5 }{array[$1,$2] += $3 }END { print "t Jant FebtMarchtAprilt Mayt" "JunetJulyt AugtSeptt Octt Novt Dec” for (prod = 1; prod <= NUMPROD; prod++) { printf "%-7s", "prod#" prod for (month = 1; month <= 12; month++){ printf "t%5d",array[prod,month] } printf "n" }} S92 / 67
  68. 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. S92 / 68
  69. 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]} S92 / 69
  70. 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)} S92 / 70
  71. 71. Rekurzija Računanje faktorjela rekurzivnim pozivima f(x)=x * f(x-1), x > 1, f(1)=1function f (num) { if (num <= 1)return 1 else return num * f(num - 1)}{ print $0 " factorial is " f($0) } S92 / 71
  72. 72. Getline & pipe (I)Čitanje podataka iz pipe-a i njihova obrada u awk-ufunction words(file, string) { string = "wc " fn string | getline close(string) return ($2)} S92 / 72
  73. 73. Getline & pipeBEGIN { for (i=1; i<ARGC; i++) { fn = ARGV[i] printf "There are %d words in %s.", words(fn), fn }} S92 / 73
  74. 74. Pitanja ? S92 / 74
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×