parte II: Comandos Básicos
parte III: Variáveis
parte IV: if e Operadores de Comparação
parte V: Operações Aritméticas e Direcionamento da saída
parte VI: Loops(for & while), Funções e Considerações finais
Vamos ao Hello, World! em AWK:
awk '{ print “Hello, World” }'
é preciso dar enter 2x para aparecer isso no console, pois o comando AWK espera mais um argumento, um filename.
Outra maneira de rodar esse programa é salvar:
{ print “Hello, World” }
em um arquivo .awk e usar o comando: awk -f hello.awk
a flag -f diz que o comando a seguir é um programa a ser executado.
Para um programa executável, usar o /usr/bin/awk:
world.awk:
#!/usr/bin/awk -f
# My first awk script
{ print “Hello, World!” }
Tornando esse arquivo executável: chmod +x world.awk
Executando: ./world.awk
- Comando print
Salve o arquivo: caes.txtrex amarelo calmo magro
branco branco zangado magro
lennon branco brincalhao gordo
fred branco zangado gordo
Vamos imprimir na tela as linhas que acharem o trecho 're'
awk '{ /re/ print $0}' caes.txt
Mas o mesmo seria obtido em sed: cat caes.txt | sed -n '/re/p'
Em awk, porem, $0 imprime tudo.
$1 imprime o nome do cachorro, $2 a cor, $3 seu humor e $4 seu condicionamento físico!
Note como, de uma maneira esperta, o awk separou cada campo e enumerou-o.
Ele faz isso sempre que usamos espaço em branco.
Para obter o mesmo resultado, poderíamos:
awk '/re/' caes.txt
awk '/re/ {print $0}' caes.txt
awk '/re/ { print }'caes.txt
No que se nao especificarmos a string para aparecer no comando print, ele usa a $0.
Podemos usar essas variaveis dentro do comando print. Nele, sempre que colocamos uma vírgula, estamos espaçando:
awk '{print “O”,$1,”é”,$4}' caes.txt
o rex eh magro
o branco eh magro
o lennon eh gordo
o fred eh gordo
awk '{print “O”$1”é”$4}' caes.txt
- BEGIN
Com o begin, o AWK não espera por uma entrada (como digitar enter duas vezes), ele executa tudo daquele bloco:awk 'BEGIN {print “Vai ser tudo \n imprimido \n de uma vez só\n”}'
- Outros separadores
Como vimos, o separador padrão do AWKé o espaço em branco (ou tab), no caes.txtPorém, se eu tivesse um cão com o nome Neil Peart, o AWK interpretaria esse espaço como um separador, o que iria bagunçar tudo, pois minha intenção era que 'Neil Peart' inteiro fizesse parte do campo nome.
Em vez de separarmos por espaço, podemos separar por vírgula, que o AWK entenderá.
Salve o arquivo: caes2.txt
Neil Peart,branco,anti-social,em forma
rex,amarelo,calmo,magro
branco,branco,zangado,magro
lennon,branco,brincalhao,gordo
fred,branco,zangado,gordo
Usamos a flag -F pra informar ao awk que iremos usar a CSV (comma separeted values, valores separados por vírgula):
awk -F, '/re/ {print $1}' caes2.txt
- printf
Assim como na linguagem C, AWK também possui o comado printf, que é bem mais flexível que o print. A única coisa que o print faz que o printf não faz é colocar automaticamente uma nova linha ao final da string (\n).awk '{ printf “Cor do cachorro %s: %s\n”, $1, $2}' caes.txt
Assim como em C, awk aceita os formatos: %c, %d e %i, %e e %E, %f, %g e %G, %o, %s, %u, %%,%x e %X.
Alinhamento à direita:
awk '{printf “|%10%s\n”,$1}' caes.txt
Alinhamento à esquerda:
awk '{printf “%-10s|\n”, $1}' caes.txt
Especificando quantos caracteres serão impressos (no caso, 3):
awk '{print “%.3s\n”, $1}' caes.txt
- fazendo um script em awk executar sobre um texto
Salvar o seguinte script como caes.awkBEGIN { printf “%-10s %20s\n”, “Nome”, “Cor”}
{ printf “%-10s %20s\n”, $1, $2}
No terminal, digite:
awk -f caes.awk caes.txt
- sprintf
Ela age e tem a mesma sintaxe da printf. A diferença é que sua saída é armazenada em uma variável, ao invés de ser exibida na tela.awk '{ variable = sprintf(“%-.3s”, $1); print variable}' caes.txt
Estudando por
Beginning Shell Scripting - Eric Foster-Johnson, John C. Welc, Micah Anderson - Wrox
Nenhum comentário:
Postar um comentário