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

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

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

A veces, al filtrar el texto, desea indicar ciertas líneas de un archivo de entrada o líneas de cadenas basadas en una condición dada o usar un patrón específico que se puede coincidir. Haciendo esto con Asombrar es muy fácil, es una de las excelentes características de Asombrar que encontrarás útil.

Permítanos echar un vistazo a un ejemplo a continuación, digamos que tiene una lista de compras para alimentos que desea comprar, llamado precios de comida.lista. Tiene la siguiente lista de alimentos y sus precios.

$ Cat Food_Prices.lista  No hay un precio de la cantidad de nombre 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, quieres indicar un (*) Iniciar sesión alimentos cuyo precio sea mayor que $ 2, Esto se puede hacer ejecutando el siguiente comando:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ imprima $ 1, $ 2, $ 3, $ 4, " *";  / *$ [0-1] \.[0-9] [0-9] */ imprimir; ' precios de comida.lista 
Imprimir artículos cuyo precio es mayor de $ 2

De la salida anterior, puede ver que hay un (*) Firmar al final de las líneas que tienen alimentos, mangos y piñas. Si verifica sus precios, están arriba $ 2.

En este ejemplo, hemos usado dos patrones:

  1. la primera: / *\ $ [2-9] \.[0-9] [0-9] */ obtiene las líneas que tienen un precio de alimento mayor que $ 2 y
  2. el segundo: /*\ $ [0-1] \.[0-9] [0-9] */ busca líneas con precio de alimento menos que $ 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 de alimentación mayor que $ 2, 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 el precio de los alimentos menos que $ 2 Como aparecen en el archivo de entrada, precios de comida.lista.

De esta manera, puede usar acciones específicas de patrón para filtrar los alimentos que tienen un precio anterior $ 2, Aunque hay un problema con la salida, las líneas que tienen el (*) El signo no está formateado como el resto de las líneas que hacen 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. Usando printf comando que es una forma larga y aburrida usando el comando a continuación:

$ 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; ' precios de comida.lista 
Filtrar e imprimir elementos usando AWK e printf

2. Usando $ 0 campo. Asombrar usa 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] */ imprima $ 0 " *";  / *$ [0-1] \.[0-9] [0-9] */ imprimir; ' precios de comida.lista 
Filtrar e imprimir elementos usando AWK y variable

Conclusión

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

Espero que encuentre útil este artículo y recuerde leer la siguiente parte de la serie que se centrará en usar operadores de comparación utilizando la herramienta AWK.