Awk©2002 LEONARDO BRUNNET

Awk é uma linguagem de procura de padrões e processamento. Sua implementação no projeto GNU é o gawk. Uma referência completa pode ser encontrada em ``The AWK Programming Language'', de Aho, Kernighan, e Weinberger. A forma genérica do comando é:

$ gawk [ opções ] -f $ \langle$arquivo-programa$ \rangle$ [-] arquivo

ou

$ gawk [ opções ] -file $ \langle$arquivo-programa$ \rangle$ [-] arquivo

As opções podem ser em formato "POSIX" de letras precedidas por - ou em formato longo "GNU" quando precedidas por - - . Veja man awk para detalhes das opções.

Um programa awk consiste de uma seqüência do tipo padrão-ação. A seguir listamos exemplos extremamente simples do uso do awk na linha de comando. Não esqueça de proteger o conjunto padrão-açãodo shell com aspas simples (' `). Construa o arquivo pinguim com o seguinte conteúdo:

1 0
1 2
3 4
5 0
6 7
8 9
10 11

Para imprimir na tela os elementos da primeira coluna do arquivo maiores que 4 digitamos:

$ awk '{if($1>4 )print $1}' pinguim
5
6
8
10

Para imprimir na tela os elementos da segunda coluna do arquivo quando os elementos da primeira são maiores que 4 digitamos:

$ awk '{if($1>4 )print $2}' pinguim
0
7
9
11

Nestes dois exemplos está implícito que o separador dos campos das variáveis $1 e $2 é o espaço. Se quizermos explorar outros separadores (e.g. o ``:'' do arquivo /etc/passwd) usamos a opção -F. Suponha que nosso arquivo pinguim seja agora:

1:0:4
1:2:23
3:4:34
5:0:3
6:7:8
8:9:22
10:11:1

Se agora voce quiser selecionar os elementos da segunda coluna quando a terceira for maior que 20 digitará:

$ awk -F : '{if($3>20) print $2}' toto
2
4
9
Se você quer saber quais os usuários do sistema tem UID maior que 20:
$ awk -F : '{if($3>20) print $1}' /etc/passwd
nobody
alice
beto
leon
lucas
naty
sandra
Ou ao contrário, suponha que você queira saber o UID de um dado usuário. Neste caso você tem de usar aspas para indicar uma string. Vamos procurar o usuário nobody em /etc/passwd:
$ awk -F : '{if($1==''noboby'') print $3}' /etc/passwd
99

leon 2008-08-19