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


En la tercera parte de la serie de comandos Awk, veremos cómo filtrar 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 excelentes características de Awk que le resultará útil.

Veamos un ejemplo a continuación, supongamos que tiene una lista de compras de alimentos que desea comprar, llamada food_prices.list . Tiene la siguiente lista de alimentos y sus precios.

$ cat food_prices.list 
No	Item_Name		Quantity	Price
1	Mangoes			   10		$2.45
2	Apples			   20		$1.50
3	Bananas			   5		$0.90
4	Pineapples		   10		$3.46
5	Oranges			   10		$0.78
6	Tomatoes		   5		$0.55
7	Onions			   5            $0.45

Y luego, desea indicar un signo (*) en los alimentos cuyo precio es mayor que , esto puede hacerse ejecutando el siguiente comando:

$ awk '/ *$[2-9]\.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / *$[0-1]\.[0-9][0-9] */ { print ; }' food_prices.list

En la salida anterior, puede ver que hay un signo (*) al final de las líneas que tienen alimentos, mangos y piñas . Si verifica sus precios, están por encima de .

En este ejemplo, hemos utilizado dos patrones usados:

  1. the first: / *\$[2-9]\.[0-9][0-9] */ gets the lines that have food item price greater than $2 and
  2. the second: /*\$[0-1]\.[0-9][0-9] */ looks for lines with food item price less than $2.

Esto es lo que sucede, hay cuatro campos en el archivo, cuando el patrón uno encuentra una línea con un precio de alimento superior a , imprime los cuatro campos y un (*) Firmar al final de la línea como una bandera.

El segundo patrón simplemente imprime las otras líneas con un precio de alimentos inferior a tal como aparecen en el archivo de entrada, food_prices.list .

De esta manera, puede usar acciones específicas de patrón para filtrar los alimentos que tienen un precio por encima de , aunque 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 maneras:

1. Usar el comando printf que es una forma larga y aburrida usando el siguiente comando:

$ 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 

2. Usando el campo sh . 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] */ { print ; }' food_prices.list 

Conclusión

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

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.

Todos los derechos reservados © Linux-Console.net • 2019-2021