AWK, parte IV: if e Operadores de Comparação

parte I: O que é e para que serve
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



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










--











Estudando por
Beginning Shell Scripting - Eric Foster-Johnson, John C. Welc, Micah Anderson - Wrox

Nenhum comentário:

Veja também: