Como escribir comandos e scripts de AWK

Comandos, sintaxe e exemplos

O comando awk é un poderoso método para procesar ou analizar ficheiros de texto, en particular, ficheiros de datos organizados por liñas (filas) e columnas.

Os comandos awk sinxelos poden executarse desde a liña de comandos . As tarefas máis complexas deben escribirse como programas awk (chamados scripts awk) nun ficheiro.

O formato básico dun comando awk é así:

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

Isto significa: coller cada liña do ficheiro de entrada; se a liña contén o patrón aplique a acción á liña e escriba a liña resultante no ficheiro de saída. Se se omite o patrón, a acción aplicarase a toda a liña. Por exemplo:

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

Esta declaración toma o elemento da 5 ª columna de cada liña e escríbeo como unha liña no ficheiro de saída "output.txt". A variable '$ 4' fai referencia á segunda columna. Do mesmo xeito pode acceder á primeira, segunda e terceira columna, con $ 1, $ 2, $ 3, etc. Por defecto as columnas supoñen que están separadas por espazos ou pestanas (o chamado espazo en branco). Entón, se o ficheiro de entrada "table1.txt" contén estas liñas:

1, Justin Timberlake, Título 545, Prezo $ 7.30 2, Taylor Swift, Título 723, Prezo $ 7.90 3, Mick Jagger, Título 610, Prezo $ 7.90 4, Lady Gaga, Título 118, Prezo $ 7.30 5, Johnny Cash, Título 482, Prezo $ 6.50 6, Elvis Presley, Título 335, Prezo de 7,30 dólares 7, John Lennon, Título 271, Prezo 7,90 dólares 8, Michael Jackson, Título 373, Prezo 5,50 dólares.

Entón o comando escribiría as seguintes liñas no ficheiro de saída "output1.txt":

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

Se o separador de columnas é outro que espazos ou pestanas, como unha coma, pode especificar na declaración awk como segue:

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

Isto seleccionará o elemento da columna 3 de cada liña se as columnas son consideradas separadas por unha coma. Polo tanto, a saída, neste caso, sería:

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

A lista de declaracións dentro dos corchetes ('{', '}') chámase un bloque. Se pon unha expresión condicional diante dun bloque, a declaración dentro do bloque executarase só se a condición é verdadeira.

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

Neste caso, a condición é $ 7 == "\ $ 7,30", o que significa que o elemento da columna 7 é igual a 7,30 dólares. A barra invertida fronte ao signo de dólar úsase para evitar que o sistema interprete $ 7 como unha variable e, en cambio, o signo do dólar literalmente.

Polo tanto, esta declaración awk imprime o elemento na 3 ª columna de cada liña que ten un "$ 7.30" na columna 7.

Tamén pode usar expresións regulares como a condición. Por exemplo:

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

A cadea entre as dúas barras ('/') é a expresión regular. Neste caso, é só a cadea "30." Isto significa que se unha liña contén a cadea "30", o sistema imprime o elemento na 3 ª columna da liña. A saída do exemplo anterior sería:

Timberlake, Gaga, Presley,

Se os elementos da táboa son os números awk pode executar cálculos sobre eles como neste exemplo:

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

Ademais das variables que acceden a elementos da fila actual ($ 1, $ 2, etc.) hai a variable $ 0 que fai referencia á liña completa (liña) e á variable NF que ten o número de campos.

Tamén pode definir novas variables como neste exemplo:

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

Isto calcula e imprime a suma de todos os elementos de cada fila.

As declaracións Awk combinan frecuentemente con comandos sed .