En Linux, awk es un dínamo de manipulación de texto de línea de comandos, así como un poderoso lenguaje de programación. Aquí hay una introducción a algunas de sus características más interesantes.
Tabla de contenido
Cómo awk obtuvo su nombre
El comando awk fue nombrado usando las iniciales de las tres personas que escribieron la versión original en 1977: Alfred Aho, Peter Weinbergery Brian Kernighan. Estos tres hombres eran del legendario AT&T Laboratorios Bell Panteón Unix. Con las contribuciones de muchos otros desde entonces, awk ha seguido evolucionando.
Es un lenguaje de programación completo, así como un conjunto de herramientas de manipulación de texto completo para la línea de comandos. Si este artículo le abre el apetito, puede mira cada detalle sobre awk y su funcionalidad.
Reglas, patrones y acciones
awk funciona en programas que contienen reglas compuestas por patrones y acciones. La acción se ejecuta en el texto que coincide con el patrón. Los patrones se encierran entre llaves ({}). Juntos, un patrón y una acción forman una regla. Todo el programa awk está entre comillas simples (‘).
Echemos un vistazo al tipo más simple de programa awk. No tiene patrón, por lo que coincide con todas las líneas de texto introducidas en él. Esto significa que la acción se ejecuta en cada línea. Bien úselo en la salida de el que manda.
Aquí está la salida estándar de quién:
who
Quizás no necesitemos toda esa información, sino más bien, solo queremos ver los nombres en las cuentas. Podemos canalizar la salida de who a awk, y luego decirle a awk que imprima solo el primer campo.
De forma predeterminada, awk considera que un campo es una cadena de caracteres rodeada por espacios en blanco, el comienzo de una línea o el final de una línea. Los campos se identifican con un signo de dólar ($) y un número. Entonces, $ 1 representa el primer campo, que usaremos con la acción de imprimir para imprimir el primer campo.
Escribimos lo siguiente:
who | awk '{print $1}'
awk imprime el primer campo y descarta el resto de la línea.
Podemos imprimir tantos campos como queramos. Si agregamos una coma como separador, awk imprime un espacio entre cada campo.
Escribimos lo siguiente para imprimir también la hora en que la persona inició sesión (campo cuatro):
who | awk '{print $1,$4}'
Hay un par de identificadores de campo especiales. Estos representan la línea completa de texto y el último campo en la línea de texto:
$ 0: representa la línea completa de texto.
$ 1: representa el primer campo.
$ 2: representa el segundo campo.
$ 7: representa el séptimo campo.
$ 45: representa el campo 45.
$ NF: Significa «número de campos» y representa el último campo.
Escribiremos lo siguiente para que aparezca un pequeño archivo de texto que contiene una breve cita atribuida a Dennis Ritchie:
cat dennis_ritchie.txt
Queremos que awk imprima el primer, segundo y último campo de la cita. Tenga en cuenta que, aunque está envuelto en la ventana de la terminal, es solo una línea de texto.
Escribimos el siguiente comando:
awk '{print $1,$2,$NF}' dennis_ritchie.txt
No conocemos esa «simplicidad». es el campo número 18 en la línea de texto, y no nos importa. Lo que sí sabemos es que es el último campo y podemos usar $ NF para obtener su valor. El período se considera simplemente otro carácter en el