Cómo utilizar Awk para filtrar texto o cadenas mediante acciones específicas de patrón

Cómo utilizar Awk para filtrar texto o cadenas mediante acciones específicas de patrón

En la tercera parte de la serie de comandos Awk, veremos el filtrado de texto o cadenas en función de patrones específicos que un usuario puede definir.

A veces, al filtrar texto, desea indicar ciertas líneas de un archivo de entrada o líneas de cadenas en función de una condición determinada o utilizando un patrón específico que puede coincidir. Hacer esto con Awk. es muy fácil, es una de las grandes características de Awk. que le resultará útil.

Echemos un vistazo un ejemplo a continuación, supongamos que tiene una lista de la compra de alimentos que desea comprar, denominada food_prices.list. Tiene la siguiente lista de alimentos y sus precios.

$ cat food_prices.list. No Item_Name Cantidad Precio 1 Mangos 10 $ 2,45 2 Manzanas 20 $ 1,50 3 Plátanos 5 $ 0.90 4 Piñas 10 $ 3.46 5 Naranjas 10 $ 0.78 6 Tomates 5 $ 0.55 7 Cebollas 5 $ 0.45

Y luego, desea indicar un signo (*) en los alimentos cuyo precio sea mayor a $ 2, esto se puede hacer ejecutando el siguiente comando:

$ awk ‘/* $ [2-9] \. [0-9] [0-9] */imprimir $ 1, $ 2, $ 3, $ 4, “*”; /* $ [0-1] \. [0-9] [0-9] */imprimir; ‘food_prices.list  Imprimir Artículos cuyo precio es superior a 2 dólares  Imprimir artículos cuyo precio sea superior a 2 dólares Imprimir artículos cuyo precio es superior a $ 2

En el resultado anterior, puede ver que hay un signo (*) al final de las líneas. tener alimentos, mangos. y piñas. Si comprueba sus precios, están por encima de $ 2.

freestar.config.enabled_slots.push

En este ejemplo, hemos usado dos patrones:

  1. el primero:/* \ $ [2-9] \. [0-9] [0-9] */obtiene las líneas que tienen precio del producto alimenticio superior a $ 2. y
  2. el segundo:/*\$[0-1]\.[0-9][0-9] */busca líneas con un precio de artículo alimenticio inferior a $ 2.

Esto es lo que sucede, hay cuatro campos en el archivo, cuando el patrón uno encuentra una línea con el precio del artículo alimenticio mayor que $ 2. imprime los cuatro campos y un signo (*) al final de la línea como una bandera.

El segundo patrón simplemente imprime las otras líneas con el precio de los alimentos menos de $ 2. tal como aparecen en el archivo de entrada, food_prices.list.

De esta forma, puede utilizar acciones específicas de patrón para filtrar los alimentos que tienen un precio superior a $ 2. aunque uf, hay un problema con la salida, las líneas que tienen el signo (*) no están formateadas como el resto de las líneas, lo que hace que la salida no sea lo suficientemente clara.

Vimos el mismo problema en la Parte 2 de la serie awk, pero podemos resolverlo de dos formas:

1.. Usando el comando printf. que es una forma larga y aburrida usando el comando debajo:

$ awk ‘/* $ [2-9] \. [0-9] [0-9] */printf “%-10s%-10s%-10s%-10s \ n”, $ 1, $ 2, $ 3, $ 4 “*”; /* $ [0-1] \. [0-9] [0-9] */printf “%-10s%-10s%-10s%-10s \ n”, $ 1, $ 2, $ 3, $ 4; ‘food_prices.list Filtrar e imprimir elementos usando Awk y Printf  Filtrar e imprimir elementos usando Awk e Printf Filtrar e imprimir elementos usando Awk y Printf

2.. Usando el campo $ 0. Awk. utiliza la variable 0. para almacenar toda la línea de entrada. Esto es útil para resolver el problema anterior y es simple y rápido de la siguiente manera:

$ awk ‘/* $ [2-9] \. [0-9] [0-9] */print $ 0 ” * “; /* $ [0-1] \. [0-9] [0-9] */imprimir; ‘food_prices.list Filtrar e imprimir elementos usando Awk y Variable  Filtra e imprime elementos usando Awk y Variable Filter and Print Items Using Awk y Variable

Conclusión

Eso es todo por ahora y estas son formas simples de filtrar texto usando una acción específica de patrón que puede ayudar a marcar líneas de texto o cadenas en un archivo usando Awk. comando.

Espero que este artículo le resulte útil y recuerde leer la siguiente parte de la serie, que se centrará en el uso de operadores de comparación con la herramienta awk.