Tutorial de AWK, parte 4: Testes Condicionais IF ELSE e Operadores Condicionais AND(&&) e OR(||)


São as instruções de controle que controlam o fluxo da execução dos programas em AWK.
Em AWK, elas são similares as de C, além de possuírem os mesmos loopings e iterações do padrão Shell.

Elas são: if, while, for, do e similares.

- if

Antes de estudarmos o 'if', vamos criar outro arquivo de texto, com números. Nesse arquivo, temos o nome de 4 pessoas, idade, há quanto tempo está no VOL(vivaolinux.com.br) e número de posts: vol.txt Neil 59 3 2112 Alex 30 5 578 Geddy 40 3 2789 Miulzo 24 1 134 Bom, quem teve o mínimo de contato com progração já sabe exatamente o que é o if. Então vamos printar na tela quem tem mais de 2mil posts: awk '{ if($4 > 2000) print $1 }' vol.txt Bem simples: se a condição 'if' for satisfeita, ele executa o próximo comando.
Fica mais fácil de fazer se separarmos esse comando em mais linhas. Veja:

awk '
 {
  if($4 < 2000)
   print $1
 }
' vol.txt

Geralmente, se deixa em uma linha quando o programa é pequeno ou estamos com preguiça.
Se for um pouco mais elobarado, colocamos num arquivo .AWK


Vamos agorar elaborar um programa com 'if', 'else' e 'strings' e salvar como: posts.awk
{
 if( $4 < 2000 )
  printf "%s postou menos de 2000 vezes\n", $1
 else
  printf "%s postou mais de 2000 vezes\n", $1
}
Executando: awk -f posts.awk vol.txt
Nesse programa, o AWK analisa cada linha, e o 4o campo de cada linha ($4, o número de posts).
Se for menor que 2mil, recai no 'if'.
Senão, recai no 'else'.


Embora tenha usado números no 'if', também poderíamos usar strings, como no script a seguir, enviado pelo usuário 'garoto-do-pintinho-piu':

#!/usr/bin/awk -f
{
 if( $1 == “pintinho” )
  printf “e o pintinho piu\n”
 else if( $1 == “galinha” )
  printf “a galinha có\n”
 else if( $1 == “galo” )
  printf “o galo corococó\n”
 else if( $1 == “peru” )
  printf “o peru glu glu\n”
 else if( $1 == “capote” )
  printf “o capote to fraco\n”
 else if( $1 == “gato” )
  printf “o gato miau\n”
 else
  printf “outro animal que quiser acrescentar\n”
}

Pronto, além de infernizar alguém pelo youtube, basta enviar um txt com uma lista de animais e mandar o .awk e infernizará seu amigo por linha de comando também, em AWK style.

Para rodar, torne o script executável: sudo chmod +x posts.awk
Rodando: ./posts.awk vol.txt

Ps: caso você não seja meu conterrâneo e do gordinho e quiser saber o que é capote, procure 'animal capote' no google, senão vai achar coisas sobre o autor Truman Capote ou sobre um, ótimo, filme chamado Capote (sobre o mesmo).

- Operadores

O '==' checa a condição de igualdade. Assim como '<', é chamado de operador de comparação.
Ei-los:
< Menor que
<=  Menor ou igual a
>  Maior que
>=  Maior ou igual a
!=  Diferente de
== Igual a

- Operadores && e ||

Para testar mais de uma condição, simultâneamente, usamos: && - E/AND || - OU/OR Por exemplos, vamos criar um programa para saber quem tem menos de 2mil posts e 30 anos ou menos: { if( ($4 < 2000) && ( $2 <= 30 ) ) printf “%s é noob na VOL”, $1 }
Se estiver com preguiça e quiser fazer na linha de comando e o programa não for tão imediato, faça como eu fiz, num editor de texto e com identação, pra ficar mais natural programar e depois vá apagando as quebras de linhas e espaços. Daí resta:

awk '{ if( ($4<2000) && ($2<=30) ) printf "%s é noob na VOL\n",$1}' vol.txt

Nenhum comentário: