Cómo usar AWK en Linux

Cómo usar AWK en Linux

La oferta de Utilities Linux a menudo sigue la filosofía de diseño Unix. Cualquier herramienta debe ser pequeña, usar texto plano 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í es un lenguaje de programación. La herramienta AWK es solo un intérprete del lenguaje de programación AWK. En esta guía, consulte cómo usar AWK en Linux.

Uso de AWK

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

El comportamiento predeterminado de AWK es usar espacios en blanco (espacios, pestañas, 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 comando de AWK.

$ awk '// ; ; '

Las porciones del comando se explican por sí mismas. AWK puede operar sin la parte de búsqueda o acción. Si no se especifica nada, entonces la acción predeterminada en la coincidencia será solo imprimir. Básicamente, AWK imprimirá todas las coincidencias que se encuentran 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 se combina, entonces AWK realiza la acción especificada.

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

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

Muestra de $ Cat.TXT

Expresión regular

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

Aquí hay una lista de algunas de las sintaxis de expresión regular más comunes. Estas sintaxis regex no son solo exclusivas de AWK. Estas son sintaxis casi universal de regex, por lo que dominarlas también ayudará en otras aplicaciones/programación que implica una expresión regular.

  • Personajes básicos: Todos los personajes alfanuméricos subrayan (_) etc.
    • Conjunto de personajes: para facilitar las cosas, hay grupos de personajes en el regex. Por ejemplo, los dígitos mayúsculas (A-Z), minúsculas (A-Z) y numéricos (0-9).
  • Características meta: Estos son personajes que explican varias formas de expandir los caracteres ordinarios.
    • Período (.): Cualquier combinación de caracteres en la posición es válida (excepto una nueva línea).
    • Asterisco (*): Cero o más existencias del carácter inmediato que precede es válido.
    • Soporte ([]): La coincidencia es válida si, en la posición, cualquiera de los caracteres del soporte se combina. Se puede combinar con conjuntos de caracteres.
    • CARET (^): El partido tendrá que estar al comienzo de la línea.
    • Dólar ($): El partido tendrá que estar al final de la línea.
    • Barra de fondo (\): Si se debe usar algún meta-caracteres en el sentido literal.

Impresión del 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 un patrón definido. Entonces, AWK imprime todas las líneas.

Muestra de $ awk 'print'.TXT

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

Búsqueda de cadenas

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

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

Muestra de $ AWK '/Quick/'.TXT

Ahora, usemos algunas expresiones regulares para ajustar aún más la búsqueda. El siguiente comando imprimirá todas las líneas que tienen "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ápidos" al final.

Muestra de $ AWK '/Quick $/'.TXT

Patrón de comodín

El siguiente ejemplo será mostrar el uso del careto (.). Aquí, puede haber dos personajes antes del personaje "E".

$ awk '/... e/' muestra.TXT

Patrón de comodín (usando asterisco)

¿Qué pasa si puede haber cualquier cantidad de caracteres en la ubicación?? Para que coincida con cualquier personaje posible en la posición, use el asterisco (*). Aquí, Awk coincidirá con todas las líneas que tienen cualquier cantidad de caracteres después de "The".

$ awk '/la muestra*/'.TXT

Expresión de soporte

El siguiente ejemplo será mostrar cómo usar la expresión del soporte. La expresión del soporte dice que en la ubicación, la coincidencia será válida si coincide con el conjunto de caracteres encerrados por los soportes. Por ejemplo, el siguiente comando coincidirá con "el" y "tee" como coincidencias válidas.

$ awk '/t [él] e/' muestra.TXT

Hay algunos conjuntos 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 contienen una letra mayúscula.

$ awk '/[a-z]/' muestra.TXT

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

  • [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 predefinidas y automáticas. Estas variables pueden facilitar los programas de escritura y los scripts con AWK.

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

  • 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 un registro a la vez. Aquí, esta variable especifica el delimitador utilizado para dividir el flujo de datos en registros. Por defecto, este valor es el carácter de Newline.
  • Nr: El número de registro de entrada actual. Si el valor RS se establece en predeterminado, entonces este valor indicará el número de línea de entrada actual.
  • FS/OFS: Los personajes utilizados como separador de campo. Una vez leída, AWK divide un registro en diferentes campos. El delimitador se define por el valor de FS. Al imprimir, AWK se une a todos los campos. Sin embargo, en este momento, AWK usa el separador OFS en lugar del separador FS. En general, tanto FS como OFS son iguales pero no obligatorios ser así.
  • NF: El número de campos en el registro actual. Si se usa el valor predeterminado "Whitespace", entonces coincidirá con el número de palabras en el registro actual.
  • Ors: El separador de registro para los datos de salida. El valor predeterminado es el carácter de Newline.

Vamos a verlos en acción. El siguiente comando utilizará la variable NR para imprimir la línea 2 a la línea 4 desde la muestra.TXT. AWK también admite operadores lógicos como Logical 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 de 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, entonces no se considera "en blanco".

Muestra de $ awk 'print' rs = ".TXT

Recursos adicionales

AWK es una herramienta poderosa con toneladas de características. Si bien esta guía cubre muchos de ellos, todavía son solo lo básico. Dominar Awk tomará más que esto. Esta guía debe ser una buena introducción a la herramienta.

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

  • Recorte de espacio en blanco
  • Usando una declaración condicional
  • Imprima una gama 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!