Você está na página 1de 2

AWK = Aho, Weinberger and Kernighan

Programao III : Maro 2002


Intro. Elementos de Linguagem
AWK uma linguagem de programa para o processamento de texto. O nome do
Constantes numricas
Unix utilitrio que interprete este linguagem tambm se chame AWK. No apenas
um filtro de Unix que transforme o seu input mas tambm consegue fazer clculos e Constantes strings: includas entre aspas; podem ter ''``n''
outros operaes conforme o seu input, por exemplo Operadores (como C)
procure de padres Funes predefinidos (log, sqrt etc.)
transformao de texto A funo print "string" ou possibilidade de utilizar sintaxe de printf de C
produes de relatrios e estatsticas printf("%s",string)

Como a escrita dum programa em AWK geralmente mais rpido do que num Variveis
linguagem compilado como C ou em Pascal muito utilizado como ferramenta de Podem ser simples (inteiros, reais, strings) ou ARRAYS.
trabalho de dia a dia por administradores de sistemas e base de dados e para rpido Os arrays podem ter ndices inteiros ou strings!
prototyping duma aplicao. Obviamente no tem a mesmo segurana e poder duma No so declaradas e so automaticamente inicializadas a 0, '''' ou array vazio,
linguagem de alto nvel. conforme o respectivo tipo (automtico).

Utilizao: Acesso aos Registos e Campos


$0 - registo actual
O texto lido para registos (geralmente uma linha) e cada registos dividido em $1, $2 - campo1, campo2 do registo actual
campos (fields), a diviso de campos normalmente um espao ou tab (\t). $NF - ultimo campo
Para cada registo feito o seguinte programa Condies Aco
Palavras reservadas e variveis globais predefinidas:
Quer dizer o registo comparada com as condies. Se for verdade feito as aces
BEGIN - Padro que verdade no incio (para inicializaes de variveis, etc.)
Condio , envolvendo possibilidade de testar: END - Padro que verdade no fim do ficheiro ( para fazer aces finais)
se o registo lido (ou cada um dos seus campos) inclui ou no certo padro FILENAME - Nome do ficheiro actualmente a ser processado
expresses envolvendo quantidades, comprimentos de campos, nmeros de NF - nmero de campos do registo actual
registos, etc NR - nmero do registo actual
condio por defeito: Verdadeira FS - O separador de campos do registo de entrada (por defeito uma sequncia de
'espaos ' '' ou '\t' pode ser mudado por exemplo FS=":")
Aco , por exemplo:
RS - Separador de registos na entrada (por defeito a nova linha '\n' )
clculo de estatsticas
escrita de texto Exemplos
substituio de texto Imprimir pela ordem oposta os dois primeiros campos de cada registo lido
atribuies, ciclos, condicionais, etc. menos o registo/linha 5.
aco por defeito: copiar registo de entrada para a sada (standard output) awk 'NR!=5 { print $2, $1}' dados.in
Imprimir os campos pela ordem inversa

awk -f invert dados.in 2) df.awk


sendo o ficheiro ''invert'': for (i = NF; i > 0; --i) print $i Escrever um ficheiro awk que utilizando como input o output do comando Unix df
produz um relatrio com informao sobre o espao em disco(s) do computador
Calcular o somatrio do primeiro campo de todos os registos do ficheiro
''dados.in'' e imprimi- lo assim como a mdia Output
Numero Total de (512) Blocos xxxxx
awk -f soma.awk dados.in Espao Total xx MB yy GB
sendo o ficheiro ''soma.awk'': Total Utilizado yy GB
{ s += $1 } Total Disponvel xx GB yy %
END { print ''soma = '', s, '' media = '', s/NR } Numero de Mount Points xx

Para Mais Informaes sobre AWK Ver 3) awk.cpu


Escrever um ficheiro awk que permite imprimir o % total de CPU do computador a
1) ciunix > man awk ser utilizado juntamente com o processo que est a consumir a maior quantidade
2) pagina : http://www.dmi.ubi.pt/~crocker/prog3/docs.html
3) fazer pesquisa para awk em www.google.com ps opes | awk -f cpu.awk
4) AWK Language Programming Total CPU 12.2 %
http://www.cl.cam.ac.uk/texinfodoc/gawk_toc.html Processo Mais Pesado : CPU 2.2 Utilizador a1234 A Executar bigprog

Exerccios 4) txt.awk
Escrever um ficheiro awk que permite transformar um texto de seguinte maneira,
1) rel.awk Apagar linhas que contm a palavra "Faro"
Escrever um ficheiro awk com nome a partir dum ficheiro de texto com o seguinte Substituir todos os ocorrncias de Palavra "Lisboa" por "Covilha"
formato Duplicar linhas cujo segundo campo igual a Fundao

Title1 Title2 4) nome.awk : No ficheiro de Passwords /etc/passwd apanhar as "Catarina"'s


2 3
3 11 awk -f awk.nome /etc/passwd
etc.
Output
Produzir um relatrio com seguinte formato Nome [ Catarina Tomas ] Userid [ ctomas ]
Nome [ Ana Catarina ferreira ] userid [ a_14297 ]
Title 1 [ 2 ] Title 2 [3 ]
Title 1 [ 3 ] Title 2 [11 ]
etc 5) Invente um exerccio com AWK, no esquecendo a sua soluo.
Soma Title1 233
Media Title1 23.2 Fazer os Exerccios em grupos de Dois. Mandar as suas solues em apenas um
ficheiro de texto com os seus nomes nos primeiros duas linhas para o endereo
crocker@ciunix.ubi.pt