Com escriure comandes i scripts AWK

Ordres, sintaxi i exemples

La comanda awk és un mètode potent per processar o analitzar fitxers de text, en particular, fitxers de dades organitzats per línies (files) i columnes.

Les comandes awk simples es poden executar des de la línia d'ordres . Les tasques més complexes s'han d'escriure com a programes awk (anomenats scripts awk) en un fitxer.

El format bàsic d'una ordre awk es veu així:

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

Això significa: prendre cada línia del fitxer d'entrada; si la línia conté el patró, apliqueu l'acció a la línia i escriviu la línia resultant al fitxer de sortida. Si s'omet el patró, l'acció s'aplica a tota la línia. Per exemple:

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

Aquesta afirmació pren l'element de la cinquena columna de cada línia i l'escriu com una línia al fitxer de sortida "output.txt". La variable '$ 4' fa referència a la segona columna. De la mateixa manera, podeu accedir a la primera, segona i tercera columna, amb $ 1, $ 2, $ 3, etc. De manera predeterminada, les columnes s'assumeixen que estan separades per espais o pestanyes (anomenades espais en blanc). Per tant, si el fitxer d'entrada "table1.txt" conté aquestes línies:

1, Justin Timberlake, Títol 545, Preu $ 7.30 2, Taylor Swift, Títol 723, Preu $ 7.90 3, Mick Jagger, Títol 610, Preu $ 7.90 4, Lady Gaga, Títol 118, Preu $ 7.30 5, Johnny Cash, Títol 482, Preu $ 6.50 6, Elvis Presley, títol 335, preu 7,30 $ 7, John Lennon, títol 271, preu 7,90 $ 8, Michael Jackson, títol 373, preu 5,50 $

Llavors, l'ordre escriuria les següents línies al fitxer de sortida "output1.txt":

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

Si el separador de columna és una altra cosa que espais o pestanyes, com ara una coma, podeu especificar-lo a la declaració awk de la següent manera:

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

Això seleccionarà l'element de la columna 3 de cada línia si les columnes es consideren separades per una coma. Per tant, la sortida, en aquest cas, seria:

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

La llista de declaracions dins dels claudàtors ('{', '}') s'anomena bloc. Si posa una expressió condicional davant d'un bloc, la instrucció dins del bloc s'executarà només si la condició és certa.

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

En aquest cas, la condició és de $ 7 == "\ $ 7,30", el que significa que l'element de la columna 7 és igual a $ 7,30. La barra invertida davant del signe de dòlar s'utilitza per evitar que el sistema interpreti $ 7 com a variable i, en canvi, porteu el signe del dòlar literalment.

D'aquesta manera, aquesta declaració awk imprimeix l'element a la tercera columna de cada línia que té un valor de "$ 7.30" a la columna 7.

També podeu utilitzar expressions regulars com a condició. Per exemple:

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

La cadena entre les dues barres ('/') és l'expressió regular. En aquest cas, és només la cadena "30." Això significa que si una línia conté la cadena "30", el sistema imprimeix l'element a la tercera columna d'aquesta línia. La sortida de l'exemple anterior seria:

Timberlake, Gaga, Presley,

Si els elements de la taula són números, awk pot executar càlculs sobre ells com en aquest exemple:

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

A més de les variables que accedeixen a elements de la fila actual ($ 1, $ 2, etc.), hi ha la variable $ 0 que fa referència a la fila completa (línia) i a la variable NF que conté el nombre de camps.

També podeu definir noves variables com en aquest exemple:

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

Això calcula i imprimeix la suma de tots els elements de cada fila.

Les expressions Awk es combinen freqüentment amb comandaments sed .