Una gu√≠a r√°pida para escribir comandos y scripts ¬ęAWK


El comando awk es un método poderoso para procesar o analizar archivos de texto, en particular archivos de datos organizados por líneas (filas) y columnas.

Los comandos simples awk pueden ejecutarse desde la línea de comandos. Las tareas más complejas deben escribirse como programas awk (los llamados scripts awk) en un archivo.

El formato b√°sico de un comando awk es el siguiente:

 awk 'pattern {action}' input-file> output-file

Esto significa: tomar cada línea del archivo de entrada; si la línea contiene el patrón, aplicar la acción a la línea y escribir la línea resultante en el archivo de salida. Si se omite el patrón, la acción se aplica a todas las líneas. Por ejemplo:

 awk '{ print $5 }' table1.txt> output1.txt

Esta declaración toma el elemento de la quinta columna de cada línea y lo escribe como una línea en el archivo de salida "output.txt". 4) La variable "$4" corresponde a la segunda columna. Del mismo modo, puede acceder a la primera, segunda y tercera columna, con $1, $2, $3, etc. Por defecto, se supone que las columnas están separadas por espacios o tabulaciones (el llamado espacio en blanco). Por lo tanto, si el archivo de entrada "table1.txt" contiene estas líneas:

1, Justin Timberlake, Título 545, Precio $7.30
2, Taylor Swift, Título 723, Precio $7.90
3, Mick Jagger, Título 610, Precio $7.90
4, Lady Gaga, Título 118, Precio $7.30
5, Johnny Cash, Título 482, Precio $6.50
6, Elvis Presley, Título 335, Precio $7.30
7, John Lennon, Título 271, Precio $7.90
8, Michael Jackson, Título 373, Precio $5.50

Entonces el comando escribir√° las siguientes l√≠neas en el archivo de salida ¬ęoutput1.txt¬Ľ:

545,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i723,
610,
118,
482,
335,
271,
373,

Si el separador de columna es algo distinto a espacios o tabulaciones, como una coma, puede especificarlo en la sentencia awk de la siguiente manera:

 awk -F, '{ print $3 }' table1.txt> output1.txt

Esto seleccionará el elemento de la columna 3 de cada línea si se considera que las columnas están separadas por una coma. Por lo tanto, el resultado, en este caso, sería:

 Título 545
> Título 545
Título 610
Título 118
Título 482
Título 335
Título 271
Título 373

La lista de sentencias dentro de los corchetes (‘{‘,’}’) se llama bloque. Si se pone una expresi√≥n condicional delante de un bloque, la sentencia dentro del bloque se ejecutar√° s√≥lo si la condici√≥n es verdadera.

 awk '$7==="$7.30" { print $3 }'' table1.txt

En este caso, la condici√≥n es $7==¬Ľ$7.30″, lo que significa que el elemento de la columna 7 es igual a $7.30. La barra invertida delante del s√≠mbolo del d√≥lar se utiliza para evitar que el sistema interprete $7 como una variable y en su lugar tome el s√≠mbolo del d√≥lar literalmente.

As√≠ que esta declaraci√≥n awk imprime el elemento en la tercera columna de cada l√≠nea que tiene un ¬ę$7.30¬Ľ en la columna 7.

También puede utilizar expresiones regulares como condición. Por ejemplo:

< awk ‘/30/ { print $3 }’ table1.txt

La cadena entre las dos barras (‘/’) es la expresi√≥n regular. En este caso, es s√≥lo la cadena ¬ę30¬Ľ. Esto significa que si una l√≠nea contiene el string ¬ę30¬Ľ, el sistema imprime el elemento en la tercera columna de esa l√≠nea. El resultado en el ejemplo anterior ser√≠a:

 Timberlake,
Gaga,
Presley,

Si los elementos de la tabla son n√ļmeros, awk puede realizar c√°lculos sobre ellos como en este ejemplo:

 awk '{ print ($2 * $3) + $7 }'

Adem√°s de las variables que acceden a los elementos de la fila actual ($1, $2, etc.) est√° la variable $0 que se refiere a la fila completa (l√≠nea), y la variable NF que mantiene el n√ļmero de campos.

También puede definir nuevas variables como en este ejemplo:

< awk ‘{ sum=0; para (col=1; col=1; col<=NF; col++) sum += $col; print sum; }'

Calcula e imprime la suma de todos los elementos de cada fila.

Las declaraciones Awk se combinan frecuentemente con comandos sed.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *