Pesquisa de site

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:

  1. > – maior que
  2. < – menos que
  3. >= – maior ou igual a
  4. <= – menor ou igual a
  5. == – igual a
  6. != – diferente de
  7. some_value ~/pattern/ – verdadeiro se some_value corresponder ao padrão
  8. some_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:

  1. 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.
  2. 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.