Awk

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Nota de desambiguació.svg Desambiguació : si busqueu altres significats, vegeu Awk (desambiguació) .
AWK
llenguatge de programació
Autor Alfred Aho , Peter Weinberger i Brian Kernighan
Data d’origen 1977
Última versió IEEE Std 1003.1-2008 (POSIX) / 1985
Ús pot manipular cadenes, enters i decimals, expressions regulars
Paradigmes scripting , procedimental , basat en dades [1]
Escrivint Debil
Influenciat per C , SNOBOL 4, shell Bourne
Va influir Tcl , AMPL , Perl , shell Korn ( ksh93 , dtksh , tksh ), Lua
Implementació de referència
Implementació awk, GNU Awk, mawk, nawk, MKS AWK, Thompson AWK (compilador), Awka (compilador)
Sistema operatiu Multiplataforma

AWK (de les inicials dels cognoms dels seus autors, Alfred Aho , Peter Weinberger i Brian Kernighan ) és un llenguatge de programació interpretat orientat a la manipulació de dades textuals , tant en forma de fitxers com de flux de dades procedents de l'entrada estàndard .

Tipus de variables

És un llenguatge escassament escrit i qualsevol variable es pot considerar com una cadena (es pot concatenar , es pot comptar el seu nombre de caràcters, etc.), fins i tot si les variables numèriques es converteixen en nombres enters o en coma flotant quan sigui necessari, per a exemple d'exemple en operacions aritmètiques. El tipus booleà està absent (és a dir, les variables amb un valor true o false ), però qualsevol variable es pot utilitzar com a valor booleà: el valor 0 , la cadena buida ( "" ) o una variable no inicialitzada es consideren false , mentre que qualsevol altra el valor és true .

A més de les variables escalars, AWK també admet matrius associatius , és a dir, matrius indexats per cadenes clau. Com que qualsevol escalar a AWK es pot considerar una cadena, també és possible definir matrius les claus de les quals són enters seqüencials, però normalment, a diferència de molts altres llenguatges de programació, això no aporta cap avantatge pel que fa al rendiment d’accés, ja que AWK no ho fa distingir entre matrius seqüencials i associatius.

Per exemple, podeu definir les dues matrius:

 # matriu "seqüencial"
arr1 [ 0 ] = "a"
arr1 [ 1 ] = "b"
arr1 [ 2 ] = "c"
# array que utilitza cadenes com a claus
arr2 [ "foo" ] = 1
arr2 [ "barra" ] = 2

L'accés a les matrius es fa generalment a través de la paraula clau in , que es desplaça a les tecles de la matriu especificada, amb un ordre indefinit:

 per ( i en arr1 ) {
        imprimir i # imprimeix "1", "2", ... NO seqüencialment
}
per ( i en arr2 ) {
        print i # print "foo", "barra" (sempre no seqüencial)
}

En el cas d'una matriu seqüencial és possible utilitzar la sintaxi d'estil C :

 per a ( i = 0 ; i < longitud ( arr1 ); ++ i ) {
        imprimir arr1 [ i ]
}

per obtenir accés seqüencial als valors.

Finalment, AWK admet expressions regulars . Una expressió regular (expressió regular o expressió regular ) es defineix entre dues barres incloses i és possible provar la coincidència entre una expressió i aquesta expressió regular mitjançant l’operador de titlla:

 # prova si la variable "foo" comença amb un dígit:
if ( foo ~ / ^ [0-9] / ) 
        # ...

Estructura d’un programa

Un programa AWK s’estructura segons una seqüència de directives com:

 condicions {accions}

Si l'script es subministra amb un o més fitxers o, en general, amb un flux de dades (per exemple mitjançant una entrada estàndard ), aquest flux es llegirà línia per línia des d'AWK; per a cada línia, les instruccions contingudes en l'script s'executen de manera seqüencial. Per a cada sentència, si la seva condició és certa per a la fila actual, es realitzen les accions corresponents a aquesta condició.

Per exemple, si a aquest programa AWK:

 # imprimeix només línies que consisteixen només en minúscules.
/ ^ [az] + $ / {
        imprimeix 0 dòlars
}

es proporciona l'entrada:

 123
Foo
pluto2

l'acció d' print $0 (que imprimeix tota la línia a la pantalla) s'executarà només per a la segona línia, mentre que les altres dues seran ignorades.

Si s'especifica una condició sense una acció relacionada, l'acció per defecte és només "imprimir tota la línia", de manera que a l'exemple anterior podríem haver utilitzat el codi equivalent:

 / ^ [az] + $ /

Per contra, si s'especifica una acció sense una condició relacionada, aquesta acció es durà a terme per a totes les files d'entrada.

Condicions especials

Hi ha dues condicions especials: BEGIN i END. Sempre s’executa una acció amb una condició BEGIN abans de processar qualsevol entrada, mentre que una acció amb una condició END s’executa sempre després de processar tota l’entrada.

Usos

AWK es pot utilitzar com a filtre , va ser una de les primeres eines que va aparèixer des de la versió 7 d’ Unix i va guanyar la reputació de ser una manera d’afegir capacitats computacionals a una canalització Unix . L’AWK s’inclou ara entre les aplicacions estàndard de totes les versions recents del sistema operatiu Unix disponibles avui en dia. No obstant això, existeixen implementacions d'AWK per a gairebé tots els altres sistemes operatius.

Normalment AWK és un llenguatge interpretat , és a dir, hi ha un fitxer executable anomenat awk que llegeix des de la línia d’ordres o des d’un fitxer el programa real escrit en llenguatge awk i l’aplica a un o més fitxers d’ entrada per produir un resultat.

Exemples

Hola món!

 # executeu només la sentència BEGIN i sortiu sense llegir cap entrada
COMENÇA { imprimeix "Hola, món!" }

Nota

  1. ^ Michael Stutz, Comenceu amb GAWK: Fonaments del llenguatge AWK , a developerWorks , IBM , 19 de setembre de 2006. Consultat el 23 d'octubre de 2010 (arxivat de l' original el 20 de maig de 2011) .
    "[AWK] s'anomena sovint un llenguatge basat en dades: les declaracions del programa descriuen les dades d'entrada perquè coincideixin i processin en lloc d'una seqüència de passos del programa" .

Altres projectes

Enllaços externs

Control de l'autoritat LCCN (EN) sh87003812 · GND (DE) 4242961-4 · BNF (FR) cb12302957w (data)
Informàtica Portal de TI : accediu a les entrades de Viquipèdia relacionades amb TI