SlideShare une entreprise Scribd logo
1  sur  74
awk

 trajanje: 1 dan
    priredili:
Rajnović Damir
  Delija Damir
  verzija 1.0
 Kolovoz 1998.
       S92 / 1
S95   Sigurnost računala i mreža


S94   Sistemska administracija
      mrežnih aplikacija



S93   TCP/IP


S92   UNIX sistemska administracija


S91   Operacijski sustav UNIX




                  S92 / 2
Ciljevi tečaja
•   upoznati se sa awk
    jezikom i alatima
•   osposobiti se za
    samostalni rad sa awk
    jezikom




                            S92 / 3
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




                           S92 / 5
Sadržaj
                     Dan 1
Uvod                            15 min
Upoznavanje awk-a               30 min
Pauza
Upoznavanje awk-a               45 min
Pauza
Upoznavanje awk-a               45 min
Pauza
Upoznavanje awk-a               45 min
Ručak

Primjeri awk koda               90 min

                      S92 / 6
Što nećete naučiti na tečaju
•   Puno toga!
•   Nećete dobiti gotove
    ‘recepte’ za sve vaše
    probleme




                            S92 / 7
Izvori
•   Awk & Sed, O’Reilly & Associates, inc.
•   SunOS dokumentacija
•   OSF1 dokumentacija,




                           S92 / 8
Uvod

                              awk
•   promjena podataka
•   jezik za generiranje izvještaja
•   jezik za pisanje interpretiranih filter program




                               S92 / 9
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
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
awk program
                                                ulazni podaci
Begin { akcija }


       $0, $1, $2 ... $NF           linija teksta

    uzorak1{ akcija }


    uzorak2 { akcija }                     ispis rezultata

END { akcija }


                         S92 / 12
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-a
                   awk -f prog1.awk
                         S92 / 13
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
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
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)



                                     S92 / 16
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
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
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
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.




                                        S92 / 20
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=%sn", i,ENVIRON[i])
  exit
}

                              S92 / 21
Ugrađene varijable
              ARGV i ARGC
•   ARGV polje sadrži argumente komandne linije

•   ARGC broj argumenata komandne linije




                              S92 / 22
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
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
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
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




                                    S92 / 26
Hijerarhija operatora
V[a]                 operacija sa poljima
V++ V-- ++V --V      increment, decrement
A^B           eksponent
A -A !A              unary plus,unary minus,logički NOT
A*B A/B A%B          množenje, dijelenje, ostatak
A+B A-B       zbrajanje, oduzimanje
AB                   spajanje stringova
A<B A>B A<=B
A>=BA!=B A==B        usporeĎivanje
A~B A!~B             regularni izrazi
A in V               pripadnost polju
A && B               logički AND
A || B               logički ILI
A ? B : C            uslovno izvoĎenje
V=B V+=B V-=B aritmetičke operacije




                                S92 / 27
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
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




                                  S92 / 29
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




                                   S92 / 30
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




                                          S92 / 31
getline i pipes
expr | 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)




                                    S92 / 32
Ugrađene matematičke
             funkcije
int(expr)

exp(expr), log(expr), sqrt(expr)

sin(expr), cos(expr)

atan2(expr1, expr2)




                         S92 / 33
Ugrađene string funkcije
Ako 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)




                                   S92 / 34
Funkcija system
system funkcija izvodi vanjsku komandu expr i vraća rezultat

                         status = system(expr)




                           system("tail " $1)




                                     S92 / 35
Korisnički definirane funkcije
function 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
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
Posebni uzorci
BEGIN
  definira akcije koje se izvode prije čitanja ulaznih podataka
END
  definira 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




                                   S92 / 38
IF - THEN - ELSE
# if statement AKO TADA INAČE

if (condition){
      statement
} else {
      statement
}




                         S92 / 39
Komentar

#   znak u liniji, komentar je sve do kraja linije

komanda ;# za komentar u istoj liniji sa komandama




                                     S92 / 40
Petlje (loops)

    while

     do

     for



     S92 / 41
while
# while loop
while (uslov) {
  komanda
}

•   odvija se sve dok je uslov istina (!= 0)




                                     S92 / 42
do-while
# do-while loop
do {
  komanda
} while (uslov)

•   odvija se dok je uslov laž!




                                  S92 / 43
for za asocijativna polja
# for
for (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
for
# for petlja, klasična c for petlja
for (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
Komande za kontrolu petlji
break
   prekida while petlju

continue
   prekida tekuću iteraciju petlje i poćinje novu

next
  prekida oradu tekuće ulazne linije i odmah nastavlja sa procesiranjem
  nove ulazne linije




                                    S92 / 46
exit

exit [(expr)]

•   prelazi na END uzorak i vraća iz programa rezultat expr izraza, (def. 0)




                                   S92 / 47
return
return [expr]

•   vraća program iz funkcije, rezultat je expr




                                 S92 / 48
delete
delete array[i]
array[i]=“”

•   briše i-ti element iz polja array




                                        S92 / 49
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




                                    S92 / 50
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‟ )




                                   S92 / 51
Redirekcija izlaza u datoteku
print > expr
printf 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!




                                      S92 / 52
Redirekcija izlaza u pipe
print |expr

•   awk uzima string vrijednost od expr kao ime komande u koju usmjeri pipe




                                     S92 / 53
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
Pauza
Ručak




 S92 / 55
Praktičan rad i primjeri




          S92 / 56
Ispis i brojenje linija datoteke

awk '{print NR SEP $0}' SEP=":" input1
awk '{print NR ":" $0}' input1


•   Primjer ispisuje linije datoteke input1 i ispred svake piše njen redni
    broj




                                    S92 / 57
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
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
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
Zamjena redoslijeda polja u
               ulazu
•   Program zamjenjuje redoslijed prvog i drugog polja u ulazu

{
    tmp = $1
    $1 = $2
    $2 = tmp
    print
}




                                  S92 / 61
Korištenje printf komande
•   Program umeće brojeve linija. Brojevi su lijevo poravnani

               {printf "%-6d: %sn", NR, $0}




                                  S92 / 62
Š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
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 order
END {
  for (i in a)
      print a[i], "lines start with", i
}




                                     S92 / 64
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
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      Mar
1#
2#




                                        S92 / 66
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
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
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
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
Rekurzija
           Računanje faktorjela rekurzivnim pozivima
                f(x)=x * f(x-1),     x > 1, f(1)=1

function f (num) {
   if (num <= 1)return 1
   else return num * f(num - 1)
}
{ print $0 " factorial is " f($0) }




                             S92 / 71
Getline & pipe (I)
Čitanje podataka iz pipe-a i njihova obrada u awk-u


function words(file, string) {
   string = "wc " fn
   string | getline
   close(string)
   return ($2)
}




                                  S92 / 72
Getline & pipe
BEGIN {
   for (i=1; i<ARGC; i++) {
   fn = ARGV[i]
   printf "There are %d words in %s.", 
      words(fn), fn
   }
}




                             S92 / 73
Pitanja



 ?

  S92 / 74

Contenu connexe

Plus de Damir Delija

Draft current state of digital forensic and data science
Draft current state of digital forensic and data science Draft current state of digital forensic and data science
Draft current state of digital forensic and data science Damir Delija
 
Why i hate digital forensics - draft
Why i hate digital forensics  -  draftWhy i hate digital forensics  -  draft
Why i hate digital forensics - draftDamir Delija
 
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...Damir Delija
 
Deep Web and Digital Investigations
Deep Web and Digital Investigations Deep Web and Digital Investigations
Deep Web and Digital Investigations Damir Delija
 
Datafoucs 2014 on line digital forensic investigations damir delija 2
Datafoucs 2014 on line digital forensic investigations damir delija 2Datafoucs 2014 on line digital forensic investigations damir delija 2
Datafoucs 2014 on line digital forensic investigations damir delija 2Damir Delija
 
EnCase Enterprise Basic File Collection
EnCase Enterprise Basic File Collection EnCase Enterprise Basic File Collection
EnCase Enterprise Basic File Collection Damir Delija
 
Olaf extension td3 inisg2 2
Olaf extension td3 inisg2 2Olaf extension td3 inisg2 2
Olaf extension td3 inisg2 2Damir Delija
 
LTEC 2013 - EnCase v7.08.01 presentation
LTEC 2013 - EnCase v7.08.01 presentation LTEC 2013 - EnCase v7.08.01 presentation
LTEC 2013 - EnCase v7.08.01 presentation Damir Delija
 
Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Damir Delija
 
Usage aspects techniques for enterprise forensics data analytics tools
Usage aspects techniques for enterprise forensics data analytics toolsUsage aspects techniques for enterprise forensics data analytics tools
Usage aspects techniques for enterprise forensics data analytics toolsDamir Delija
 
Cis 2013 digitalna forenzika osvrt
Cis 2013 digitalna forenzika osvrt  Cis 2013 digitalna forenzika osvrt
Cis 2013 digitalna forenzika osvrt Damir Delija
 
Aix workload manager
Aix workload managerAix workload manager
Aix workload managerDamir Delija
 
2013 obrada digitalnih dokaza
2013 obrada digitalnih dokaza 2013 obrada digitalnih dokaza
2013 obrada digitalnih dokaza Damir Delija
 
Tip zlocina digitalni dokazi
Tip zlocina digitalni dokaziTip zlocina digitalni dokazi
Tip zlocina digitalni dokaziDamir Delija
 
Sigurnost i upravljanje distribuiranim sustavima
Sigurnost i upravljanje distribuiranim sustavimaSigurnost i upravljanje distribuiranim sustavima
Sigurnost i upravljanje distribuiranim sustavimaDamir Delija
 
Improving data confidentiality in personal computer environment using on line...
Improving data confidentiality in personal computer environment using on line...Improving data confidentiality in personal computer environment using on line...
Improving data confidentiality in personal computer environment using on line...Damir Delija
 
Communication network simulation on the unix system trough use of the remote ...
Communication network simulation on the unix system trough use of the remote ...Communication network simulation on the unix system trough use of the remote ...
Communication network simulation on the unix system trough use of the remote ...Damir Delija
 
Mehanizmi razmjene poruka ostvareni preko RPCa
Mehanizmi razmjene poruka ostvareni preko RPCaMehanizmi razmjene poruka ostvareni preko RPCa
Mehanizmi razmjene poruka ostvareni preko RPCaDamir Delija
 

Plus de Damir Delija (20)

Draft current state of digital forensic and data science
Draft current state of digital forensic and data science Draft current state of digital forensic and data science
Draft current state of digital forensic and data science
 
Why i hate digital forensics - draft
Why i hate digital forensics  -  draftWhy i hate digital forensics  -  draft
Why i hate digital forensics - draft
 
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...
Concepts and Methodology in Mobile Devices Digital Forensics Education and Tr...
 
Deep Web and Digital Investigations
Deep Web and Digital Investigations Deep Web and Digital Investigations
Deep Web and Digital Investigations
 
Datafoucs 2014 on line digital forensic investigations damir delija 2
Datafoucs 2014 on line digital forensic investigations damir delija 2Datafoucs 2014 on line digital forensic investigations damir delija 2
Datafoucs 2014 on line digital forensic investigations damir delija 2
 
EnCase Enterprise Basic File Collection
EnCase Enterprise Basic File Collection EnCase Enterprise Basic File Collection
EnCase Enterprise Basic File Collection
 
Ocr and EnCase
Ocr and EnCaseOcr and EnCase
Ocr and EnCase
 
Olaf extension td3 inisg2 2
Olaf extension td3 inisg2 2Olaf extension td3 inisg2 2
Olaf extension td3 inisg2 2
 
LTEC 2013 - EnCase v7.08.01 presentation
LTEC 2013 - EnCase v7.08.01 presentation LTEC 2013 - EnCase v7.08.01 presentation
LTEC 2013 - EnCase v7.08.01 presentation
 
Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013 Moguće tehnike pristupa forenzckim podacima 09.2013
Moguće tehnike pristupa forenzckim podacima 09.2013
 
Usage aspects techniques for enterprise forensics data analytics tools
Usage aspects techniques for enterprise forensics data analytics toolsUsage aspects techniques for enterprise forensics data analytics tools
Usage aspects techniques for enterprise forensics data analytics tools
 
Cis 2013 digitalna forenzika osvrt
Cis 2013 digitalna forenzika osvrt  Cis 2013 digitalna forenzika osvrt
Cis 2013 digitalna forenzika osvrt
 
Ibm aix wlm idea
Ibm aix wlm ideaIbm aix wlm idea
Ibm aix wlm idea
 
Aix workload manager
Aix workload managerAix workload manager
Aix workload manager
 
2013 obrada digitalnih dokaza
2013 obrada digitalnih dokaza 2013 obrada digitalnih dokaza
2013 obrada digitalnih dokaza
 
Tip zlocina digitalni dokazi
Tip zlocina digitalni dokaziTip zlocina digitalni dokazi
Tip zlocina digitalni dokazi
 
Sigurnost i upravljanje distribuiranim sustavima
Sigurnost i upravljanje distribuiranim sustavimaSigurnost i upravljanje distribuiranim sustavima
Sigurnost i upravljanje distribuiranim sustavima
 
Improving data confidentiality in personal computer environment using on line...
Improving data confidentiality in personal computer environment using on line...Improving data confidentiality in personal computer environment using on line...
Improving data confidentiality in personal computer environment using on line...
 
Communication network simulation on the unix system trough use of the remote ...
Communication network simulation on the unix system trough use of the remote ...Communication network simulation on the unix system trough use of the remote ...
Communication network simulation on the unix system trough use of the remote ...
 
Mehanizmi razmjene poruka ostvareni preko RPCa
Mehanizmi razmjene poruka ostvareni preko RPCaMehanizmi razmjene poruka ostvareni preko RPCa
Mehanizmi razmjene poruka ostvareni preko RPCa
 

Awk 1 day course

  • 1. awk trajanje: 1 dan priredili: Rajnović Damir Delija Damir verzija 1.0 Kolovoz 1998. S92 / 1
  • 2. S95 Sigurnost računala i mreža S94 Sistemska administracija mrežnih aplikacija S93 TCP/IP S92 UNIX sistemska administracija S91 Operacijski sustav UNIX S92 / 2
  • 3. Ciljevi tečaja • upoznati se sa awk jezikom i alatima • osposobiti se za samostalni rad sa awk jezikom S92 / 3
  • 4. Područja • Pregled awk jezika • Primjeri korištenja awk jezika S92 / 4
  • 5. Potrebno predznanje • Korisnički rad sa UNIX-om • Poznavanje shell-a • Poznavanje UNIX-a utilities S92 / 5
  • 6. Sadržaj Dan 1 Uvod 15 min Upoznavanje awk-a 30 min Pauza Upoznavanje awk-a 45 min Pauza Upoznavanje awk-a 45 min Pauza Upoznavanje awk-a 45 min Ručak Primjeri awk koda 90 min S92 / 6
  • 7. Što nećete naučiti na tečaju • Puno toga! • Nećete dobiti gotove ‘recepte’ za sve vaše probleme S92 / 7
  • 8. Izvori • Awk & Sed, O’Reilly & Associates, inc. • SunOS dokumentacija • OSF1 dokumentacija, S92 / 8
  • 9. Uvod awk • promjena podataka • jezik za generiranje izvještaja • jezik za pisanje interpretiranih filter program S92 / 9
  • 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. 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. awk program ulazni podaci Begin { akcija } $0, $1, $2 ... $NF linija teksta uzorak1{ akcija } uzorak2 { akcija } ispis rezultata END { akcija } S92 / 12
  • 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-a awk -f prog1.awk S92 / 13
  • 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. 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. 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) S92 / 16
  • 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. 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. 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. 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. S92 / 20
  • 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=%sn", i,ENVIRON[i]) exit } S92 / 21
  • 22. Ugrađene varijable ARGV i ARGC • ARGV polje sadrži argumente komandne linije • ARGC broj argumenata komandne linije S92 / 22
  • 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. 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. 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. 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 S92 / 26
  • 27. Hijerarhija operatora V[a] operacija sa poljima V++ V-- ++V --V increment, decrement A^B eksponent A -A !A unary plus,unary minus,logički NOT A*B A/B A%B množenje, dijelenje, ostatak A+B A-B zbrajanje, oduzimanje AB spajanje stringova A<B A>B A<=B A>=BA!=B A==B usporeĎivanje A~B A!~B regularni izrazi A in V pripadnost polju A && B logički AND A || B logički ILI A ? B : C uslovno izvoĎenje V=B V+=B V-=B aritmetičke operacije S92 / 27
  • 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. 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 S92 / 29
  • 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 S92 / 30
  • 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 S92 / 31
  • 32. getline i pipes expr | 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) S92 / 32
  • 33. Ugrađene matematičke funkcije int(expr) exp(expr), log(expr), sqrt(expr) sin(expr), cos(expr) atan2(expr1, expr2) S92 / 33
  • 34. Ugrađene string funkcije Ako 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) S92 / 34
  • 35. Funkcija system system funkcija izvodi vanjsku komandu expr i vraća rezultat status = system(expr) system("tail " $1) S92 / 35
  • 36. Korisnički definirane funkcije function 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. 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. Posebni uzorci BEGIN definira akcije koje se izvode prije čitanja ulaznih podataka END definira 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 S92 / 38
  • 39. IF - THEN - ELSE # if statement AKO TADA INAČE if (condition){ statement } else { statement } S92 / 39
  • 40. Komentar # znak u liniji, komentar je sve do kraja linije komanda ;# za komentar u istoj liniji sa komandama S92 / 40
  • 41. Petlje (loops) while do for S92 / 41
  • 42. while # while loop while (uslov) { komanda } • odvija se sve dok je uslov istina (!= 0) S92 / 42
  • 43. do-while # do-while loop do { komanda } while (uslov) • odvija se dok je uslov laž! S92 / 43
  • 44. for za asocijativna polja # for for (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. for # for petlja, klasična c for petlja for (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. Komande za kontrolu petlji break prekida while petlju continue prekida tekuću iteraciju petlje i poćinje novu next prekida oradu tekuće ulazne linije i odmah nastavlja sa procesiranjem nove ulazne linije S92 / 46
  • 47. exit exit [(expr)] • prelazi na END uzorak i vraća iz programa rezultat expr izraza, (def. 0) S92 / 47
  • 48. return return [expr] • vraća program iz funkcije, rezultat je expr S92 / 48
  • 49. delete delete array[i] array[i]=“” • briše i-ti element iz polja array S92 / 49
  • 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 S92 / 50
  • 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‟ ) S92 / 51
  • 52. Redirekcija izlaza u datoteku print > expr printf 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! S92 / 52
  • 53. Redirekcija izlaza u pipe print |expr • awk uzima string vrijednost od expr kao ime komande u koju usmjeri pipe S92 / 53
  • 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
  • 56. Praktičan rad i primjeri S92 / 56
  • 57. Ispis i brojenje linija datoteke awk '{print NR SEP $0}' SEP=":" input1 awk '{print NR ":" $0}' input1 • Primjer ispisuje linije datoteke input1 i ispred svake piše njen redni broj S92 / 57
  • 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. 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. 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. Zamjena redoslijeda polja u ulazu • Program zamjenjuje redoslijed prvog i drugog polja u ulazu { tmp = $1 $1 = $2 $2 = tmp print } S92 / 61
  • 62. Korištenje printf komande • Program umeće brojeve linija. Brojevi su lijevo poravnani {printf "%-6d: %sn", NR, $0} S92 / 62
  • 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. 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 order END { for (i in a) print a[i], "lines start with", i } S92 / 64
  • 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. 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 Mar 1# 2# S92 / 66
  • 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. 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. 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. 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. Rekurzija Računanje faktorjela rekurzivnim pozivima f(x)=x * f(x-1), x > 1, f(1)=1 function f (num) { if (num <= 1)return 1 else return num * f(num - 1) } { print $0 " factorial is " f($0) } S92 / 71
  • 72. Getline & pipe (I) Čitanje podataka iz pipe-a i njihova obrada u awk-u function words(file, string) { string = "wc " fn string | getline close(string) return ($2) } S92 / 72
  • 73. Getline & pipe BEGIN { for (i=1; i<ARGC; i++) { fn = ARGV[i] printf "There are %d words in %s.", words(fn), fn } } S92 / 73
  • 74. Pitanja ? S92 / 74