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.