Como usar operadores de comparação com Awk no Linux - Parte 4
Ao lidar com valores numéricos ou de string em uma linha de texto, filtrar texto ou strings usando operadores de comparação é útil para usuários do comando Awk.
Nesta parte da série Awk, veremos como você pode filtrar texto ou strings usando operadores de comparação. Se você é um programador, então já deve estar familiarizado com os operadores de comparação, mas aqueles que não estão, deixe-me explicar na seção abaixo.
O que são operadores de comparação no Awk?
Os operadores de comparação no Awk são usados para comparar o valor de números ou strings e incluem o seguinte:
>
– maior que<
– menos que>=
– maior ou igual a<=
– menor ou igual a==
– igual a!=
– diferente desome_value ~/pattern/
– verdadeiro se some_value corresponder ao padrãosome_value !~/pattern/
– verdadeiro se some_value não corresponder ao padrão
Agora que vimos os vários operadores de comparação no Awk, vamos entendê-los melhor usando um exemplo.
Neste exemplo, temos um arquivo chamado food_list.txt que é uma lista de compras para diferentes alimentos e gostaria de sinalizar os alimentos cuja quantidade é menor ou igual a 20 adicionando ( **)
no final de cada linha.
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45
4 Tomatoes 25 $3.45
5 Onions 15 $1.45
6 Bananas 30 $3.45
A sintaxe geral para usar operadores de comparação no Awk é:
expression { actions; }
Para atingir o objetivo acima, terei que executar o comando abaixo:
# awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt
No Item_Name` Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45 **
3 Pineapples 5 $4.45 **
4 Tomatoes 25 $3.45 **
5 Onions 15 $1.45 **
6 Bananas 30 $3.45 **
No exemplo acima, duas coisas importantes acontecem:
- A primeira expressão { action ; } combinação, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } imprime linhas com quantidade menor ou igual a 30 e adiciona um (**) no final de cada linha. O valor da quantidade é acessado usando a variável de campo $3.
- A segunda expressão { action ; } combinação, $3 > 30 { print $0 ;} imprime linhas inalteradas, pois sua quantidade é maior que 30.
Mais um exemplo:
# awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;} ' food_list.txt
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45 TRUE
4 Tomatoes 25 $3.45
5 Onions 15 $1.45 TRUE
6 Bananas 30 $3.45
Neste exemplo, queremos indicar linhas com quantidade menor ou igual a 20 com a palavra (TRUE) no final.
Resumo
Este é um tutorial introdutório aos operadores de comparação no Awk, portanto você precisa experimentar muitas outras opções e descobrir mais.
No caso de qualquer problema que você enfrente ou qualquer acréscimo que tenha em mente, deixe um comentário na seção de comentários abaixo. Lembre-se de ler a próxima parte da série Awk, onde mostrarei expressões compostas.