http://www.flickr.com/photos/atomicshed/2405111237/




                   awk

Almir 'm3nd3s'
@m3nd3s
m3nd3s@gmail.com
http://www.almirmendes.com/
O que é o AWK?
AWK é uma
    linguagem de
    programação

para processamento de dados
     baseados em texto
O que significa AWK?
        Alfred V. Aho,
     Peter J. Weinberger
      Brian W. Kernighan
$ man awk
http://www.flickr.com/photos/nuagedenuit/155699074/




Quando usar
Quando temos um conteúdo em
formato texto particularmente
   separado por delimitador
http://www.flickr.com/photos/anotherjesse/151464940/




      Quando um comando ou uma sequência
       de comandos do shell (cut, grep, etc.)
      não “parecem” suficientes para obter o
               resultado desejado
Quando utilizar linguagens como
     Java, C, Pascal, etc., parece
                      “apelação”




    http://www.flickr.com/photos/linssen/5226407901/
Quando os dados   “tem cara de
AWK”
awk [pattern] { action }
awk { print $0 } /etc/passwd


cat /etc/passwd | awk { print $0 }
Os $x são os campos

 O $0 é toda linha

   O NF é..... ?
Delimitador default é
      o espaço

  Mas você pode trocar!
     Basta usar o -F
¬¬'
   Isto não me parece uma
linguagem de programação?!
Controle de fluxo


if, while, do while, for,
for in, continue, break
echo "10:34" |
awk -F: '{ if($2<30)
 printf("%d:00",$1)
        else
printf("%d:30",$1)}'
Tem suporte a Regex?

     expr ~ /er/

    expr !~ /er/
date |
     awk '$1 ~ /^Ter/
{ print "Siege Day - " $0 }'
http://www.flickr.com/photos/mrbill/2482009942/




                    As expressões são
                     similares ao da
                       linguagem C
Assignment         = += -= *= /= %= ^=
conditional        ? :
logical or         ||
logical and        &&
array membership   in
matching           ~ !~
relational         < > <= >= == !=
concatenation      (no explicit operator)
add ops            + -
mul ops            * / %
unary              + -
logical not        !
exponentiation     ^
inc and dec        ++ -- (both post and
pre)
field              $
Variáveis pré-definidas

      FILENAME
          NF
          NR
         OFS
         ORS
Funções internas de
      string




      http://www.flickr.com/photos/61417318@N00/4908148942/
Você também pode
 definir funções!
function csplit(s, A, n, i) {
  n = length(s)
  for( i = 1 ; i <= n ; i++ )A[i] = substr(s, i, 1)
  return n
}
http://www.flickr.com/photos/bittersweet_memories/4388392704/




              Kramba.. isso na linha de
                 comando é osso!
awk -f prog.awk arquivo
Exemplos!!!!!!!!!!!!!
     O__o
Emulando o cat:

   { print }
Emulando o wc:
{ chars += length($0) + 1; words +=
                NF }
   END { print NR, words, chars }
Referências
           $ man awk
http://pt.wikipedia.org/wiki/Awk
           google.com
Almir 'm3nd3s'
          @m3nd3s
      m3nd3s@gmail.com
http://www.almirmendes.net/

Palestra sobre AWK [Giran Siege]