You are on page 1of 7

Awk (linguagem de programao)

Awk um grande utilitrio de interpretao da linguagem de programao awk para


manipulao de dados e texto de programao em shell script, nos quais bastante utilizado
para separar campos sendo mais poderoso do que o comando cut.

Sintaxe do awk:
awk -F valor -v var=valor -f arquivo

Um programa awk contm uma seqncia de padres (expresses regulares) e aes da


seguinte forma:
padro
{
ao1
ao2
}
Awk l a entrada ou sada a partir de um arquivo ou comando linha por linha, ento cada linha
comparada com um padro. Se o padro encontrado para cada linha, ento a ao entra
em execuo. O padro pode ser expresses regulares usando os seguintes metacaracteres:
Metacaractere

Significado

Procura qualquer caractere

Procura zero ou mais caractere

Procura no comeo da linha

Procura no fim da linha

Ignora caracteres

[]

Listagem

{}

Procura um intervalo

Procura mais de um precedentes

Procura um ou mais precedentes

Separa uma escolha a ser procurada

Primeiramente comece criando um arquivo de texto com o comando cat

$ cat > frutas.txt


1.Limo 2 1.99
2.Morango 5 2.00
3.Banana 2 1.50
4.Pra 3 4.00
Exemplo 1:
O exemplo abaixo o comando awk imprime apenas a primeira ($1) e a terceira ($3) coluna do
arquivo frutas.txt, onde so armazenadas nas variveis especiais $1 e $3.

$ awk '{ print $1, $3}' frutas.txt


Sada do comando

1.Limo 1.99
2.Morango 2.00
3.Banana 1.50
4.Pra 4.00
Exemplo 2:
O exemplo abaixo o comando awk usado para imprimir os valores das colunas 1, 2 e 3 onde
so armazenadas nas variveis especiais $1, $2 e $3, sendo que feito um clculo
multiplicando ($2 * $3) as colunas $2 e $3, precedido de " => R$ ".

$ awk '{ print $1 " => R$ " $2 * $3 }' frutas.txt


Sada do comando

1.Limo => R$ 3.98

2.Morango => R$ 10
3.Banana => R$ 3
4.Pra => R$ 12
Exemplo 3:
O exemplo abaixo criado um arquivo onde filtra apenas uma linha do arquivo especificando
a fruta na coluna 1 ($1), a quantidade na coluna 2 ($2) e o preo na coluna 3 ($3).

$ cat > Limo


/Limo/ { print $1 " Quantidade:" $2 " Preo:" $3}
Executando o comando

$ awk -f Limo frutas.txt


1.Limo Quantidade:2 Preo:1.99
Exemplo 4:
$0 uma varivel especial do awk, que imprime todas linhas de um arquivo como mostra o
exemplo abaixo:

$ awk '{ print $0 }' frutas.txt


1.Limo 2 1.99
2.Morango 5 2.00
3.Banana 2 1.50
4.Pra 3 4.00
Exemplo 5:
O exemplo abaixo imprime todas as linhas que tem o preo na coluna 3 ($3) maior que 2.00
R$.

$ awk '$3 > 2.00 {print $1, $3}' frutas.txt


2.Morango 2.00
4.Pra 4.00
Exemplo 6:
No exemplo abaixo feito um programa chamado Produtos, nos quais criado uma varivel
total que armazena o valor total de cada item e no final uma grande varivel chamada
total_geral que armazena o valor total de todos os itens (total_geral = total_geral +
total).

$ cat > Produtos


BEGIN {
print "---------------------"
print "Comeo do programa"
print "---------------------"
}

{
total = $2 * $3
fruta = $1
preco = $3
print fruta " Total Item: R$ " total
total_geral = total_geral + total
}

END {

print "----------------------------"
print "Fim do programa"
print "======= TOTAL GERAL ========="
print "Total Geral: R$ " total_geral
}

Executando o comando

$ awk -f Produtos frutas.txt


--------------------Comeo do programa
--------------------1.Limo Total Item: R$ 3.98
2.Morango Total Item: R$ 10
3.Banana Total Item: R$ 3
4.Pra Total Item: R$ 12
---------------------------Fim do programa
======= TOTAL GERAL =========
Total Geral: R$ 28.98

Para imprimir um ttulo no incio do programa e exibir o total geral no final necessrio
especificar os comandos BEGIN que especifica aes antes da primeira linha de registros e
END que especifica aes depois de todas as linhas de registros como mostra a sintaxe
abaixo:
Sintaxe:
BEGIN {
ao 1
ao 2
}

END {
ao 1
ao 2
}

Outros Exemplos:
Exemplo 1:
O exemplo abaixo exibe a primeira ($1) e a terceira ($3) coluna do arquivo /etc/passwd que
corresponde ao nome e ID do usurio.
$ less /etc/passwd | awk -F : '{print $1,$3}'
Sada do comando

root 0
daemon 1
bin 2
aluno1 1000
sshd 114
...
Exemplo 2:
O exemplo abaixo exibe todas as interfaces de rede disponveis (lo, eth0, eth1, etc).

$ ifconfig | grep "inet end.:" | awk '{print $3}'


Sada do comando

192.168.1.10
127.0.0.1

Exemplo 3:
No exemplo abaixo feito as operaes de adio, subtrao, multiplicao, diviso e resto
da diviso nas colunas 1($1) e 2 ($2), onde solicitado dois valores para p usurio.

$ cat > calculos


{
print $1 " + " $2 " = " $1 + $2
print $1 " - " $2 " = " $1 - $2
print $1 " * " $2 " = " $1 * $2
print $1 " / " $2 " = " $1 / $2
print $1 " resto diviso " $2 " de (" $1 "/" $2 ") = " $1 % $2
}
Execute o comando abaixo e digite dois valores separados por espao (20 3) e depois
pressione CTRL + D para sair.

$ awk -f calculos
20 3
20 + 3 = 23
20 - 3 = 17
20 * 3 = 60
20 / 3 = 6.66667
20 resto diviso 3 de (20/3) = 2

Pressione CTRL + D para sair

You might also like