Skip to main content

Cómo escribir comandos y secuencias de comandos AWK

AK47 AUTOMATICA #2 | CUERNO DE CHIVO (Julio 2024)

AK47 AUTOMATICA #2 | CUERNO DE CHIVO (Julio 2024)
Anonim

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.

Sencillo awk Los comandos se pueden ejecutar desde la línea de comandos. Las tareas más complejas deben escribirse como programas awk (denominados scripts awk) en un archivo.

El formato básico de un comando awk se ve así:

awk 'patrón {acción}' archivo de entrada> archivo de salida

Esto significa: tomar cada línea del archivo de entrada; Si la línea contiene el patrón, aplique la acción a la línea y escriba 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". La variable '$ 4' se refiere a la segunda columna. De manera similar, 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 (lo que se denomina espacio en blanco). Entonces, si el archivo de entrada "table1.txt" contiene estas líneas:

1, Justin Timberlake, Título 545, Precio $ 7.302, Taylor Swift, Título 723, Precio $ 7.903, Mick Jagger, Título 610, Precio $ 7.904, Lady Gaga, Título 118, Precio $ 7.305, Johnny Cash, Título 482, Precio $ 6.506, Elvis Presley, Título 335, Precio $ 7.307, John Lennon, Título 271, Precio $ 7.908, Michael Jackson, Título 373, Precio $ 5.50

Luego, el comando escribiría las siguientes líneas en el archivo de salida "output1.txt":

545,723,610,118,482,335,271,373,

Si el separador de columnas es algo distinto de espacios o tabulaciones, como una coma, puede especificarlo en la instrucción 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 la salida, en este caso, sería:

Título 545 Título 723 Titulo 610 Título 118 Título 482 Título 335 Título 271 Título 373

La lista de declaraciones dentro de las llaves ('{', '}') se llama bloque. Si coloca una expresión condicional delante de un bloque, la instrucción dentro del bloque se ejecutará solo 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 en la columna 7 es igual a $ 7.30. La barra invertida en frente del signo de dólar se usa para evitar que el sistema interprete $ 7 como una variable y, en cambio, tome el signo de 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 la condición. Por ejemplo:

awk '/ 30 / {print $ 3}' table1.txt

La cadena entre las dos barras diagonales ('/') es la expresión regular. En este caso, es sólo la cadena "30". Esto significa que si una línea contiene la cadena "30", el sistema imprime el elemento en la tercera columna de esa línea. La salida en el ejemplo anterior sería:

Timberlake, Gagá, Presley

Si los elementos de la tabla son números, awk puede ejecutar cálculos en ellos como en este ejemplo:

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

Además de las variables que acceden a los elementos de la fila actual ($ 1, $ 2, etc.), se encuentra la variable $ 0 que se refiere a la fila completa (línea) y la variable NF que corresponde al número de campos.

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

awk '{suma = 0; para (col = 1; col <= NF; col ++) suma + = $ col; suma impresa } '

Esto calcula e imprime la suma de todos los elementos de cada fila.

Las declaraciones Awk se combinan frecuentemente con comandos sed.