Almir 'm3nd3s' @m3nd3s [email protected] http://www.almirmendes.com/ http://www.flickr.com/photos/atomicshed/2405111237/ awk
Jan 18, 2015
Almir 'm3nd3s'@[email protected]://www.almirmendes.com/
http://www.flickr.com/photos/atomicshed/2405111237/
awk
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
Quando usar
http://www.flickr.com/photos/nuagedenuit/155699074/
Quando temos um conteúdo em formato texto particularmente
separado por delimitador
Quando um comando ou uma sequência Quando um comando ou uma sequência de comandos do shell (cut, grep, etc.) de comandos do shell (cut, grep, etc.)
não “parecem” suficientes para obter o não “parecem” suficientes para obter o resultado desejadoresultado desejado
http://www.flickr.com/photos/anotherjesse/151464940/
Quando utilizar linguagens como Quando utilizar linguagens como Java, C, Pascal, etc., parece Java, C, Pascal, etc., parece
“apelação”“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 }'
As expressões são As expressões são similaressimilares ao da ao da
linguagem Clinguagem C
http://www.flickr.com/photos/mrbill/2482009942/
Assignment = += -= *= /= %= ^=conditional ? :logical or ||logical and &&array membership inmatching ~ !~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
FILENAMENFNR
OFSORS
Funções internas de Funções internas de stringstring
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}
Kramba.. isso na linha de Kramba.. isso na linha de comando é osso!comando é osso!
http://www.flickr.com/photos/bittersweet_memories/4388392704/
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 }