En esta guía para principiantes, aprenderá los conceptos básicos de awk
dominio. También verá algunas de las formas en que puede usarlo cuando se trata de texto.
¡Empecemos!
¿Qué es el awk
? comando?
awk
es un lenguaje de secuencias de comandos y es útil cuando se trabaja en la línea de comandos. También es un comando ampliamente utilizado para el procesamiento de texto.
Al usar awk
, puede seleccionar datos (uno o más fragmentos de texto individual) en función de un patrón que proporcione.
Por ejemplo, algunas de las operaciones que puedes hacer con awk
está buscando una palabra o un patrón específico en un fragmento de texto dado, o incluso selecciona una determinada línea o una determinada columna en un archivo que proporciona.
La sintaxis básica de awk
comando
En su forma más simple, el awk
El comando va seguido de un conjunto de comillas simples y un conjunto de llaves, y el nombre del archivo en el que desea buscar se menciona en último lugar.
Se parece a esto:
awk '{action}' your_file_name.txt
Cuando desee buscar texto que tenga un patrón específico o busque una palabra específica en el texto, el comando se vería así:
awk '/regex pattern/{action}' your_file_name.txt
Cómo crear un archivo de muestra
Para crear un archivo en la línea de comando, usa el touch
dominio.
Por ejemplo:touch filename.txt
donde filename
, es el nombre de su archivo.
A continuación, puede utilizar el open
comando (open filename.txt
), y se abrirá un programa de procesador de texto como TextEdit donde puede agregar el contenido del archivo.
Entonces, supongamos que tiene un archivo de texto, information.txt
, que contiene datos separados en diferentes columnas.
El contenido del archivo podría verse así:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
En mi ejemplo, hay una columna para firstName
, lastName
, age
, city
y ID
.
En cualquier momento, puede ver la salida del contenido de su archivo escribiendo cat text_file
, donde text_file
es el nombre de su archivo.
Cómo imprimir todo el contenido del archivo usando awk
Para imprimir todo el contenido de un archivo, la acción que especifica dentro de las llaves es print $0
.
Esto funcionará exactamente de la misma manera que el cat
comando mencionado anteriormente.
awk '{print $0}' information.txt
Salida:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Si desea que cada línea tenga un número de línea, debe usar el NR
variable incorporada:
awk '{print NR,$0}' information.txt
1 fristName lastName age city ID
2
3 Thomas Shelby 30 Rio 400
4 Omega Night 45 Ontario 600
5 Wood Tinker 54 Lisbon N/A
6 Giorgos Georgiou 35 London 300
7 Timmy Turner 32 Berlin N/A
Cómo imprimir columnas específicas usando awk
Al usar awk
, puede especificar ciertas columnas que desea imprimir.
Para imprimir la primera columna, utilice el comando:
awk '{print $1}' information.txt
Salida:
Thomas
Omega
Wood
Giorgos
Timmy
El $1
representa el primer campo, en este caso la primera columna.
Para imprimir la segunda columna, usaría $2
:
awk '{print $2}' information.txt
Salida:
lastName
Shelby
Night
Tinker
Georgiou
Turner
La forma awk
determina dónde comienza y termina cada columna con un espacio, de forma predeterminada.
Para imprimir más de una columna, por ejemplo, la primera y la cuarta columna, haría lo siguiente:
awk '{print $1, $4}' information.txt
Salida:
fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin
El $1
representa el primer campo de entrada (primera columna) y el $4
representa el cuarto. Los separas con una coma, $1,$4
, por lo que la salida tiene un espacio y es más legible.
Para imprimir el último campo (la última columna), también puede usar $NF
que representa el último campo en un registro:
awk '{print $NF}' information.txt
Salida:
ID
400
600
N/A
300
N/A
Cómo imprimir líneas específicas de una columna
También puede especificar la línea que desea imprimir de su columna elegida:
awk '{print $1}' information.txt | head -1
Salida:
FirstName
Analicemos ese comando. awk '{print $1}' information.txt
imprime la primera columna. Luego, la salida de ese comando (que viste anteriormente) es canalizada , utilizando el símbolo de tubería |
, al comando principal, donde es -1
argumento selecciona la primera línea de la columna.
Si quisiera imprimir dos líneas, haría:
awk '{print $1}' information.txt | head -2
Salida:
FirstName
Dionysia
Cómo imprimir líneas con un patrón específico en awk
Puede imprimir una línea que empieza con una letra específica.
Por ejemplo:
awk '/^O/' information.txt
Salida:
Omega Night 45 Ontario 600
Ese comando selecciona cualquier línea con texto que empieza con una O
.
Usas el símbolo de la flecha hacia arriba (^
) primero, que indica el comienzo de una línea, y luego la letra con la que desea que comience una línea.
También puede imprimir una línea que termina en un patrón específico:
awk '/0$/' information.txt
Salida:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Esto imprime las líneas que terminan en un 0
– el $
El símbolo se usa después de un carácter para indicar cómo terminará una línea.
Ese comando también podría cambiarse a:
awk '! /0$/' information.txt
El !
se usa como NOT
, por lo que en este caso selecciona las líneas que NO terminan en un 0
.
fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Cómo usar expresiones regulares en awk
Para generar palabras que contengan ciertas letras e imprimir palabras que coincidan con un patrón que especifique, vuelva a utilizar las barras inclinadas, //
, mostrado anteriormente.
Si desea buscar palabras que contengan on
, harías:
awk ' /io/{print $0}' information.txt
Salida:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Esto coincide con todas las entradas que contienen io
.
Digamos que tiene una columna adicional:un department
columna:
fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering
Para encontrar toda la información de las personas que trabajan en IT
, deberá especificar la cadena que está buscando entre las barras, //
:
awk '/IT/' information.txt
Salida:
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT
¿Qué pasaría si quisiera ver solo el nombre y apellido de las personas que trabajan en IT
? ?
Puede especificar la columna así:
awk '/IT/{print $1, $2}' information.txt
Salida:
Thomas Shelby
Wood Tinker
Esto solo mostrará la primera y la segunda columna donde IT
aparece, en lugar de presentar todos los campos.
Al buscar palabras con un patrón específico, puede haber ocasiones en las que necesite usar un carácter de escape, como este:
awk '/N\/A$/' information.txt
Salida:
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Quería encontrar líneas que terminaran con el patrón N/A
.
Entonces, al buscar entre ' // '
como se muestra hasta ahora, tuve que usar un carácter de escape (\
) entre N/A
, de lo contrario habría recibido un error.
Cómo usar operadores de comparación en awk
Si, por ejemplo, quisiera encontrar toda la información de los empleados menores de 40
, usaría el <
operador de comparación así:
awk '$3 < 40 { print $0 }' information.txt
Salida:
Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
La salida muestra solo la información de personas menores de 40 años.
Conclusión
¡Y ahí lo tienes! Ahora conoce los conceptos básicos absolutos para comenzar a trabajar con awk
y manipular datos de texto.
Para obtener más información sobre Linux, freeCodeCamp tiene una amplia variedad de materiales de aprendizaje disponibles.
Aquí hay un par de ellos para que comiences:
- Conceptos básicos de Linux - Taller práctico
- Linux para hackers éticos (tutorial de Kali Linux)
- Manual de comandos de Linux
Gracias por leer y feliz aprendizaje 😊