Búsqueda de sitios web

Cómo utilizar operadores de comparación con Awk en Linux - Parte 4


Cuando se trata de valores numéricos o de cadena en una línea de texto, filtrar texto o cadenas usando operadores de comparación resulta útil para los usuarios del comando Awk.

En esta parte de la serie Awk, veremos cómo filtrar texto o cadenas utilizando operadores de comparación. Si eres programador entonces ya debes estar familiarizado con los operadores de comparación, pero aquellos que no lo están, déjame explicarte en la sección siguiente.

¿Qué son los operadores de comparación en Awk?

Los operadores de comparación en Awk se utilizan para comparar el valor de números o cadenas e incluyen lo siguiente:

  1. > – mayor que
  2. < – menos de
  3. >= – mayor o igual a
  4. <= – menor o igual a
  5. == – igual a
  6. != – no es igual a
  7. algún_valor ~/patrón/ – verdadero si algún_valor coincide con el patrón
  8. algún_valor !~/patrón/ – verdadero si algún_valor no coincide con el patrón

Ahora que hemos visto los distintos operadores de comparación en Awk, entenderemos mejorlos con un ejemplo.

En este ejemplo, tenemos un archivo llamado food_list.txt que es una lista de compras para diferentes alimentos y me gustaría marcar los alimentos cuya cantidad es menor o igual a 20 agregando ( **) al final de cada línea.

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

La sintaxis general para usar operadores de comparación en Awk es:

expression { actions; }

Para lograr el objetivo anterior, tendré que ejecutar el siguiente comando:

# 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	**

En el ejemplo anterior, suceden dos cosas importantes:

  1. La primera expresión { acción ; } combinación, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } imprime líneas con una cantidad menor o igual a 30 y agrega un (**) al final de cada línea. Se accede al valor de la cantidad mediante la variable de campo $3.
  2. La segunda expresión { acción ; } combinación, $3 > 30 { print $0 ;} imprime las líneas sin cambios ya que su cantidad es mayor que 30.

Un ejemplo más:

# 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

En este ejemplo, queremos indicar líneas con cantidad menor o igual a 20 con la palabra (TRUE) al final.

Resumen

Este es un tutorial introductorio a los operadores de comparación en Awk, por lo tanto, debes probar muchas otras opciones y descubrir más.

En caso de que tenga algún problema o alguna adición que tenga en mente, deje un comentario en la sección de comentarios a continuación. Recuerda leer la siguiente parte de la serie Awk donde te guiaré a través de expresiones compuestas.