GNU/Linux >> Tutoriales Linux >  >> Linux

Primeros pasos con awk, una poderosa herramienta de análisis de texto

Awk es una poderosa herramienta de análisis de texto para Unix y sistemas similares a Unix, pero debido a que tiene funciones programadas que puede usar para realizar tareas de análisis comunes, también se considera un lenguaje de programación. . Probablemente no desarrolle su próxima aplicación GUI con awk, y probablemente no reemplace a su lenguaje de secuencias de comandos predeterminado, pero es una poderosa utilidad para tareas específicas.

Cuáles pueden ser esas tareas es sorprendentemente diversa. La mejor manera de descubrir cuál de sus problemas podría resolverse mejor con awk es aprender awk; se sorprenderá de cómo awk puede ayudarlo a hacer más pero con mucho menos esfuerzo.

La sintaxis básica de Awk es:

awk [options] 'pattern {action}' file

Para comenzar, cree este archivo de muestra y guárdelo como colores.txt

name       color  amount
apple      red    4
banana     yellow 6
strawberry red    3
grape      purple 10
apple      green  8
plum       purple 2
kiwi       brown  4
potato     brown  9
pineapple  yellow 5

Estos datos están separados en columnas por uno o más espacios. Es común que los datos que analiza estén organizados de alguna manera. Puede que no siempre sean columnas separadas por espacios en blanco, o incluso una coma o un punto y coma, pero especialmente en archivos de registro o volcados de datos, generalmente hay un patrón predecible. Puede utilizar patrones de datos para ayudar a awk a extraer y procesar los datos en los que desea centrarse.

Imprimiendo una columna

En awk, la impresión La función muestra lo que especifique. Hay muchas variables predefinidas que puede usar, pero algunas de las más comunes son números enteros que designan columnas en un archivo de texto. Pruébalo:

$ awk '{print $2;}' colours.txt
color
red
yellow
red
purple
green
purple
brown
brown
yellow

En este caso, awk muestra la segunda columna, indicada por $2 . Esto es relativamente intuitivo, por lo que probablemente puedas adivinar que imprime $1 muestra la primera columna e imprime $3 muestra el tercero, y así sucesivamente.

Para mostrar todo columnas, use $0 .

El número después del signo de dólar ($ ) es una expresión , entonces $2 y $(1+1) significan lo mismo.

Seleccionar columnas condicionalmente

El archivo de ejemplo que está utilizando está muy estructurado. Tiene una fila que sirve como encabezado y las columnas se relacionan directamente entre sí. Al definir condicional requisitos, puede calificar lo que desea que awk devuelva al mirar estos datos. Por ejemplo, para ver elementos en la columna 2 que coincidan con "amarillo" e imprimir el contenido de la columna 1:

awk '$2=="yellow"{print $1}' colours.txt
banana
pineapple

Las expresiones regulares también funcionan. Este condicional se ve en $2 para coincidencias aproximadas con la letra p seguido de cualquier número de (uno o más) caracteres, que a su vez van seguidos de la letra p :

$ awk '$2 ~ /p.+p/ {print $0}' colours.txt
grape   purple  10
plum    purple  2

Los números son interpretados naturalmente por awk. Por ejemplo, para imprimir cualquier fila con una tercera columna que contenga un número entero mayor que 5:

awk '$3>5 {print $1, $2}' colours.txt
name    color
banana  yellow
grape   purple
apple   green
potato  brown

Separador de campo

Por defecto, awk usa espacios en blanco como separador de campos. Sin embargo, no todos los archivos de texto usan espacios en blanco para definir campos. Por ejemplo, cree un archivo llamado colores.csv con este contenido:

name,color,amount
apple,red,4
banana,yellow,6
strawberry,red,3
grape,purple,10
apple,green,8
plum,purple,2
kiwi,brown,4
potato,brown,9
pineapple,yellow,5

Awk puede tratar los datos exactamente de la misma manera, siempre que especifique qué carácter debe usar como separador de campo en su comando. Usa el --field-separator (o simplemente -F para abreviar) opción para definir el delimitador:

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
banana
pineapple

Guardando salida

Usando la redirección de salida, puede escribir sus resultados en un archivo. Por ejemplo:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt

Esto crea un archivo con el contenido de su consulta awk.

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

También puede dividir un archivo en varios archivos agrupados por datos de columna. Por ejemplo, si desea dividir colors.txt en varios archivos según el color que aparece en cada fila, puede hacer que awk redirija por consulta al incluir la redirección en su declaración awk:

$ awk '{print > $2".txt"}' colours.txt

Esto produce archivos llamados amarillo.txt , rojo.txt , y así sucesivamente.

En el próximo artículo, aprenderá más sobre campos, registros y algunas variables awk poderosas.


Este artículo es una adaptación de un episodio de Hacker Public Radio, un podcast de tecnología comunitaria.


Linux
  1. Comenzando con Zsh

  2. Comenzando con ls

  3. Primeros pasos con Samba para la interoperabilidad

  4. Primeros pasos con socat, una herramienta de retransmisión multipropósito para Linux

  5. Cómo:Introducción a Ansible

Primeros pasos con el sistema operativo Linux

Primeros pasos con GitHub

Primeros pasos con el administrador de paquetes de Nix

Primeros pasos con systemctl

Primeros pasos con AWK Command [Guía para principiantes]

Primeros pasos con el comando Tar