Awk

Cómo usar AWK en Linux

Cómo usar AWK en Linux

Las utilidades que ofrece Linux a menudo siguen la filosofía de diseño de UNIX. Cualquier herramienta debe ser pequeña, usar texto sin formato para E / S y operar de manera modular. Gracias al legado, tenemos algunas de las mejores funcionalidades de procesamiento de texto con la ayuda de herramientas como sed y awk.

En Linux, la herramienta awk viene preinstalada en todas las distribuciones de Linux. AWK en sí mismo es un lenguaje de programación. La herramienta AWK es solo un intérprete del lenguaje de programación AWK. En esta guía, vea cómo usar AWK en Linux.

Uso de AWK

La herramienta AWK es más útil cuando los textos están organizados en un formato predecible. Es bastante bueno para analizar y manipular datos tabulares. Opera línea por línea, en todo el archivo de texto.

El comportamiento predeterminado de awk es usar espacios en blanco (espacios, tabulaciones, etc.) para separar campos. Afortunadamente, muchos de los archivos de configuración en Linux siguen este patrón.

Sintaxis básica

Así es como se ve la estructura de comandos de awk.

$ awk '// ; ; '

Las partes del comando se explican por sí mismas. Awk puede funcionar sin la parte de búsqueda o acción. Si no se especifica nada, la acción predeterminada en la coincidencia será simplemente imprimir. Básicamente, awk imprimirá todas las coincidencias encontradas en el archivo.

Si no hay un patrón de búsqueda especificado, awk realizará las acciones especificadas en cada línea del archivo.

Si se dan ambas porciones, entonces awk usará el patrón para determinar si la línea actual lo refleja. Si coincide, awk realiza la acción especificada.

Tenga en cuenta que awk también puede funcionar en textos redirigidos. Esto se puede lograr canalizando el contenido del comando a awk para actuar en. Obtenga más información sobre el comando de canalización de Linux.

Para fines de demostración, aquí hay un archivo de texto de muestra. Contiene 10 líneas, 2 palabras por línea.

$ muestra de gato.TXT

Expresión regular

Una de las características clave que hacen de awk una herramienta poderosa es el soporte de expresiones regulares (regex, para abreviar). Una expresión regular es una cadena que representa un determinado patrón de caracteres.

Aquí hay una lista de algunas de las sintaxis de expresiones regulares más comunes. Estas sintaxis de expresiones regulares no son exclusivas de awk. Estas son sintaxis de expresiones regulares casi universales, por lo que dominarlas también ayudará en otras aplicaciones / programación que involucran expresiones regulares.

  • Personajes básicos: Todos los caracteres alfanuméricos subrayados (_), etc.
    • Conjunto de caracteres: para facilitar las cosas, hay grupos de caracteres en la expresión regular. Por ejemplo, mayúsculas (A-Z), minúsculas (a-z) y dígitos numéricos (0-9).
  • Metacaracteres: Estos son personajes que explican varias formas de expandir los caracteres ordinarios.
    • Período (.): Cualquier carácter coincidente en la posición es válido (excepto una nueva línea).
    • Asterisco (*): Cero o más existencias del carácter inmediato que lo precede es válido.
    • Soporte ([]): La coincidencia es válida si, en la posición, cualquiera de los caracteres del paréntesis coincide. Se puede combinar con juegos de caracteres.
    • Caret (^): El partido tendrá que ser al inicio de la línea.
    • Dólar ($): El partido tendrá que estar al final de la línea.
    • Barra invertida (\): Si algún metacarácter tiene que usarse en el sentido literal.

Imprimir el texto

Para imprimir todo el contenido de un archivo de texto, use el comando de impresión. En el caso del patrón de búsqueda, no hay patrón definido. Entonces, awk imprime todas las líneas.

$ awk 'print' muestra.TXT

Aquí, "imprimir" es un comando AWK que imprime el contenido de la entrada.

Búsqueda de cadenas

AWK puede realizar una búsqueda de texto básica en el texto dado. En la sección de patrones, tiene que ser el texto para encontrar.

En el siguiente comando, awk buscará el texto "rápido" en todas las líneas del archivo de muestra.TXT.

$ awk '/ quick /' muestra.TXT

Ahora, usemos algunas expresiones regulares para afinar aún más la búsqueda. El siguiente comando imprimirá todas las líneas que tengan "marrón" al principio.

$ awk '/ ^ brown /' muestra.TXT

¿Qué tal encontrar algo al final de una línea?? El siguiente comando imprimirá todas las líneas que tengan "rápido" al final.

$ awk '/ quick $ /' muestra.TXT

Patrón de comodín

El siguiente ejemplo mostrará el uso del signo de intercalación (.). Aquí, puede haber dos caracteres cualesquiera antes del carácter "e".

$ awk '/… e /' muestra.TXT

Patrón de comodín (con asterisco)

¿Qué pasa si puede haber cualquier número de caracteres en la ubicación?? Para hacer coincidir cualquier carácter posible en la posición, use el asterisco (*). Aquí, AWK coincidirá con todas las líneas que tengan cualquier cantidad de caracteres después de "the".

$ awk '/ the * /' muestra.TXT

Expresión de corchetes

El siguiente ejemplo mostrará cómo usar la expresión de corchetes. La expresión entre corchetes indica que en la ubicación, la coincidencia será válida si coincide con el conjunto de caracteres entre corchetes. Por ejemplo, el siguiente comando coincidirá con "The" y "Tee" como coincidencias válidas.

$ awk '/ T [he] e /' muestra.TXT

Hay algunos juegos de caracteres predefinidos en la expresión regular. Por ejemplo, el conjunto de todas las letras mayúsculas se etiqueta como "A-Z". En el siguiente comando, awk coincidirá con todas las palabras que contengan una letra mayúscula.

$ awk '/ [A-Z] /' muestra.TXT

Eche un vistazo al siguiente uso de conjuntos de caracteres con expresión de corchetes.

  • [0-9]: indica un solo dígito
  • [a-z]: indica una sola letra minúscula
  • [A-Z]: indica una sola letra mayúscula
  • [a-zA-z]: indica una sola letra
  • [a-zA-z 0-9]: indica un solo carácter o dígito.

Awk variables predefinidas

AWK viene con un montón de variables automáticas y predefinidas. Estas variables pueden facilitar la escritura de programas y scripts con AWK.

Estas son algunas de las variables AWK más comunes que encontrará.

  • NOMBRE DEL ARCHIVO: El nombre de archivo del archivo de entrada actual.
  • RS: El separador de registros. Debido a la naturaleza de AWK, procesa los datos de uno en uno. Aquí, esta variable especifica el delimitador utilizado para dividir el flujo de datos en registros. De forma predeterminada, este valor es el carácter de nueva línea.
  • NR: El número de registro de entrada actual. Si el valor de RS se establece en el valor predeterminado, este valor indicará el número de línea de entrada actual.
  • FS / OFS: Los caracteres utilizados como separador de campo. Una vez leído, AWK divide un registro en diferentes campos. El delimitador está definido por el valor de FS. Al imprimir, AWK vuelve a unir todos los campos. Sin embargo, en este momento, AWK usa el separador OFS en lugar del separador FS. Generalmente, tanto FS como OFS son iguales, pero no son obligatorios para serlo.
  • NF: El número de campos en el registro actual. Si se utiliza el valor predeterminado "espacio en blanco", coincidirá con el número de palabras del registro actual.
  • ORS: El separador de registros para los datos de salida. El valor predeterminado es el carácter de nueva línea.

Vamos a comprobarlos en acción. El siguiente comando usará la variable NR para imprimir la línea 2 en la línea 4 de la muestra.TXT. AWK también admite operadores lógicos como lógicos y (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Para asignar un valor específico a una variable AWK, use la siguiente estructura.

$ awk '// ; ; ' =,

Por ejemplo, para eliminar todas las líneas en blanco del archivo de entrada, cambie el valor de RS a básicamente nada. Es un truco que usa una regla POSIX oscura. Especifica que si el valor de RS es una cadena vacía, los registros están separados por una secuencia que consiste en una nueva línea con una o más líneas en blanco. En POSIX, una línea en blanco sin contenido está completamente vacía. Sin embargo, si la línea contiene espacios en blanco, no se considera "en blanco".

$ awk 'print' RS = "muestra.TXT

Recursos adicionales

AWK es una herramienta poderosa con toneladas de funciones. Si bien esta guía cubre muchos de ellos, sigue siendo solo lo básico. Dominar AWK requerirá algo más que esto. Esta guía debería ser una buena introducción a la herramienta.

Si realmente desea dominar la herramienta, aquí hay algunos recursos adicionales que debe consultar.

  • Recortar el espacio en blanco
  • Usando una declaración condicional
  • Imprime un rango de columnas
  • Regex con AWK
  • 20 ejemplos de AWK

Internet es un buen lugar para aprender algo. Hay muchos tutoriales increíbles sobre los conceptos básicos de AWK para usuarios muy avanzados.

Pensamiento final

Con suerte, esta guía ayudó a proporcionar una buena comprensión de los conceptos básicos de AWK. Si bien puede llevar un tiempo, dominar AWK es extremadamente gratificante en términos del poder que otorga.

Computación feliz!

Los mejores juegos de Oculus App Lab
Si es propietario de un visor Oculus, debe estar informado sobre la descarga lateral. Sideloading es el proceso de instalación de contenido que no es ...
Los 10 mejores juegos para jugar en Ubuntu
La plataforma Windows ha sido una de las plataformas dominantes para juegos debido al gran porcentaje de juegos que se están desarrollando hoy para ad...
5 mejores juegos de arcade para Linux
Hoy en día, las computadoras son máquinas serias que se usan para jugar. Si no puede obtener la nueva puntuación más alta, sabrá a qué me refiero. En ...