Pregunta 1¿Qué produce awk '{print $1}' f?
awk — Extracción de campos
Practica awk: '{print $1}' extrae una columna, $NF toma la última columna, -F',' cambia el separador a coma, NR y NF, y /error/{print $2} procesa solo las líneas que coinciden — ilustrado y en una terminal del navegador.
Extraer columnas — $1 / $NF / -F
awk es un comando que divide cada línea en columnas (campos) por espacios y te permite procesarlas campo a campo. Escribir awk '{print $1}' extrae e imprime solo la primera columna de cada línea. Dentro de {} escribes la acción que se ejecuta en cada línea (aquí, print). $1 es la primera columna, $2 es la segunda y $0 se refiere a la línea completa.
$NF es una forma especial de referirse a la última columna. NF es una variable que contiene el número de campos de una línea, por lo que $NF te da la columna final de esa línea. Aunque el número de columnas varíe de línea en línea, siempre obtienes la última. Cuando el separador no es un espacio, especifícalo con -F, como en -F','. Lo más seguro es poner el separador entre comillas (-F',').
printf 'alice 30 tokyo\nbob 25 osaka\n' > users.txt # crear el material
awk '{print $1}' users.txt # columna 1: alice y bob
awk '{print $2}' users.txt # columna 2: 30 y 25
awk '{print $NF}' users.txt # última columna: tokyo y osaka
printf 'alice,30\nbob,25\n' > csv.txt # material separado por comas
awk -F',' '{print $1}' csv.txt # separador coma, columna 1
$1 es la primera columna y $NF apunta a la última columna de esa línea.| Forma | Significado | Ejemplo |
|---|---|---|
$1 | Extraer la columna 1 | awk '{print $1}' users.txt |
$2 | Extraer la columna 2 | awk '{print $2}' users.txt |
$NF | Extraer la última columna | awk '{print $NF}' users.txt |
$0 | Extraer la línea completa | awk '{print $0}' users.txt |
-F',' | Cambiar el separador a coma | awk -F',' '{print $1}' csv.txt |
NR | Número de línea actual | awk '{print NR, $0}' nf.txt |
NF | Número de campos de la línea | awk '{print NF}' nf.txt |
/pat/{print $1} | Imprimir columna 1 de líneas que coinciden con pat | awk '/error/{print $1}' log.txt |
Número de línea y conteo de campos — NR / NF
NR es una variable integrada que contiene el número de la línea que se está procesando y NF contiene el número de campos de esa línea. Escribir awk '{print NR, $0}' imprime cada línea completa con su número de línea delante. Con awk '{print NF}' puedes ver en cuántas columnas se dividió cada línea.
printf 'red\ngreen blue\n' > nf.txt # crear el material
awk '{print NR, $0}' nf.txt # 1 red / 2 green blue
awk '{print NF}' nf.txt # línea 1 tiene 1 columna, línea 2 tiene 2
Procesar solo las líneas que coinciden — /pat/{print ...}
Cuando escribes un patrón antes del programa, awk aplica ese programa solo a las líneas que coinciden. awk '/error/{print $1}' imprime la columna 1 solo en las líneas que contienen error. Donde grep muestra la línea completa, awk puede extraer solo las columnas que necesitas de las líneas que coinciden.
printf 'error disk\ninfo start\nerror cpu\n' > log.txt # crear el material
awk '/error/{print $2}' log.txt # columna 2 de líneas error: disk y cpu
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Qué opción añades para que awk use una coma como separador?
Pregunta 3¿Qué líneas procesa awk '/error/{print $1}' f?