Conegueu el comandament de Linux: gawk

Nom

gawk - escaneig de patrons i llenguatge de processament

Sinopsi

Gawk [Opcions d'estil POSIX o GNU] -f fitxer de programa [ - ] ...
gawk [opcions d'estil POSIX o GNU] [ - ] arxiu de text del programa ...

pgawk [opcions d'estil POSIX o GNU] -f fitxer de programa [ - ] ...
pgawk [opcions d'estil POSIX o GNU] [ - ] arxiu de text del programa ...

Descripció

Gawk és la implementació del projecte GNU del llenguatge de programació AWK. S'ajusta a la definició del llenguatge a la norma POSIX 1003.2 de llenguatge de comandament i utilitats. Aquesta versió, al seu torn, es basa en la descripció del llenguatge de programació AWK , d'Aho, Kernighan i Weinberger, amb les característiques addicionals que es troben a la versió 4 de System V Release d'UNIX awk . Gawk també proporciona extensions awk de Bell Laboratories més recents i diverses extensions específiques de GNU.

Pgawk és la versió de perfil de gawk . És idèntic en tots els sentits, excepte que els programes s'executen més lentament, i automàticament es genera un perfil d'execució al fitxer awkprof.out quan es fa. Vegeu l'opció --profile , a continuació.

La línia d'ordres està formada per opcions per guanyar -se, el text del programa AWK (si no s'ofereix a través de les opcions -f o -file ), i valors disponibles a les variables AWG predefinides ARGC i ARGV .

Format d'opcions

Les opcions de Gawk poden ser les opcions tradicionals d'una sola lletra POSIX o les opcions de llarg termini de l'estil GNU. Les opcions POSIX comencen amb una única `` - '', mentre que les opcions llargues comencen amb `` - ''. Les opcions llargues es proporcionen tant per a les característiques específiques de GNU com per a les funcions ordenades per POSIX.

Seguint l'estàndard POSIX, les opcions específiques de Gawk es subministren mitjançant arguments a l'opció -W . Es poden subministrar diverses opcions -W . Cada opció -W té una opció llarga corresponent, tal com es detalla a continuació. Els arguments a les opcions llargues s'uneixen a l'opció mitjançant un signe = , sense espais intervinents, o es poden proporcionar en el següent argument de línia d'ordres. Les opcions llargues poden ser abreujades, sempre que l'abreviatura sigui única.

Opcions

Gawk accepta les següents opcions, enumerades alfabèticament.

-F fs

--field-separator fs Utilitzeu fs per al separador de camp d'entrada (el valor de la variable predefinida FS ).

-v var = val

--assign var = val Assigneu el valor a la variable var , abans de començar l'execució del programa. Aquests valors de variable estan disponibles per al bloc BEGIN d'un programa AWK.

-f fitxer de programa

- fitxer de programa de fitxers Llegeix l'origen del programa AWK del fitxer de programa , en comptes del primer argument de la línia de comandaments. Es poden utilitzar diverses opcions -f (o - fitxer ).

-mf NNN

-mr NNN Estableix diversos límits de memòria al valor NNN . L'indicador f estableix el nombre màxim de camps, i l'indicador r estableix la mida màxima de registre. Aquestes dues banderes i l'opció -m són de la versió de recerca de Bell Laboratories d' UNIX awk . El gawk l' ignora, ja que Gawk no té límits predefinits.

-Només compatible

-N tradicionals

--compat

--tradicional Executa en mode de compatibilitat . En mode de compatibilitat, gawk es comporta de manera idèntica a UNIX awk ; no es reconeixen cap de les extensions específiques de GNU. Es prefereix l'ús de --tradicional sobre les altres formes d'aquesta opció. Consulteu Extensions de GNU , a continuació, per obtenir més informació.

-W copyleft

-W drets d'autor

--copyleft

--copyright Imprimiu la versió curta del missatge d'informació del copyright GNU a la sortida estàndard i surti amb èxit.

-W dump-variables [ = fitxer ]

--dump-variables [ = fitxer ] Imprimiu una llista ordenada de variables globals, els seus tipus i valors finals al fitxer . Si no es proporciona cap fitxer , gawk usa un fitxer anomenat awkvars.out al directori actual.

Tenir una llista de totes les variables globals és una bona manera de buscar errors tipogràfics als vostres programes. També usarà aquesta opció si teniu un programa gran amb moltes funcions i voleu assegurar-vos que les vostres funcions no usin de forma involuntària les variables globals que voleu que siguin locals. (Es tracta d'un error particularment fàcil de fer amb noms de variables simples com i , j , etc.).

-W ajuda

-Utilització de W

- ajuda

- Anunciar Imprimir un resum relativament curt de les opcions disponibles a la sortida estàndard. (Per les Normes de codificació de GNU , aquestes opcions provoquen una sortida immediata i exitosa.)

-W pelusa [ = fatal ]

--lint [ = mortal ] Proporciona advertències sobre construccions dubtoses o no portàtils per a altres implementacions de l'OLL. Amb un argument opcional de fatal , les advertències de pelussa esdevenen errors fatals. Això pot ser dràstic, però el seu ús sens dubte fomentarà el desenvolupament de programes AWK més nets.

-Nombre d'edat

--lint-old Proporciona advertiments sobre construccions que no són portàtils a la versió original d'Unix awk .

-W gen-po

--gen-po Escanejar i analitzar el programa AWK, i generar un fitxer de format GNU .po en la sortida estàndard amb entrades per a totes les cadenes localitzables del programa. El programa en si no s'executa. Vegeu la distribució de GNOME gettext per obtenir més informació sobre fitxers .po .

-W dades no-decimals

--non-decimal-data Reconeix valors octal i hexadecimal en les dades d'entrada. Utilitzeu aquesta opció amb gran precaució.

-W posix

--posix Això activa el mode de compatibilitat , amb les següents restriccions addicionals:

*

\ x les seqüències d'escapament no es reconeixen.

*

Només l'espai i la pestanya actuen com a separadors de camp quan FS està establert en un únic espai, la nova línia no ho fa.

*

No podeu continuar les línies després ? i :.

*

No es reconeix el func sinònim de la funció de paraules clau.

*

Els operadors ** i ** = no es poden utilitzar en lloc de ^ i ^ = .

*

La funció fflush () no està disponible.

-W perfil [ = perfil_profile ]

--profile [ = prof_file ] Enviar dades de perfil a prof_file . El valor predeterminat és awkprof.out . Quan s'executa amb gawk , el perfil només és una versió `` pretty printed '' del programa. Quan s'executa amb pgawk , el perfil conté els recomptes d'execució de cada instrucció del programa en el marge esquerre i els recomptes de trucades de funció per a cada funció definida per l'usuari.

-V interval de nou

--re-interval Habilita l'ús d' expressions d' interval en la concordança d'expressions regulars (vegeu Expressions regulars , a continuació). Les expressions d'intervals no estaven tradicionalment disponibles en el llenguatge AWK. L'estàndard POSIX els va afegir, per fer que awk i egrep siguin compatibles entre si. Tanmateix, és probable que el seu ús trenqui els vells programes AWK, de manera que Gawk només els proporciona si se'ls sol·licita amb aquesta opció, o quan --posix s'especifica.

-W font -program-text

--source -program-text Utilitzeu el text del programa com a codi font del programa AWK. Aquesta opció permet l'intercanvi fàcil de funcions de la biblioteca (s'utilitza a través de les opcions -f i --file ) amb el codi font introduït a la línia d'ordres. Està pensat principalment per a programes AWK mitjà a gran que s'utilitzen en scripts de shell.

-W versió

--version Impressió de la informació de la versió per a aquesta còpia en particular de gawk a la sortida estàndard. Això és útil sobretot per saber si la còpia actual de gawk al vostre sistema està actualitzada respecte a la distribució de la Free Software Foundation. Això també és útil per informar errors. (Per les Normes de codificació de GNU , aquestes opcions provoquen una sortida immediata i exitosa.)

- Indiqueu el final de les opcions. Això és útil per permetre nous arguments al propi programa AWK per començar amb un `` - ''. Això es deu principalment a la coherència amb la convenció d'anàlisi d'arguments utilitzada per la majoria dels altres programes POSIX.

En el mode de compatibilitat, qualsevol altra opció es marca com a invàlida, però d'altra banda s'ignoren. En el funcionament normal, sempre que s'hagi subministrat el text del programa, les opcions desconegudes es passen al programa AWK a la matriu ARGV per al seu processament. Això és especialment útil per executar programes AWK a través del mecanisme d'intèrpret executable `` #! ''.

EXECUCIÓ DEL PROGRAMA AWK

Un programa AWK consisteix en una seqüència d'instruccions de patró-acció i definicions de funcions opcionals.

patró { instruccions d'acció }

nom de la funció ( llista de paràmetres ) ( declaracions )

Gawk primer llegeix la font del programa dels fitxers del programa si s'especifica, des dels arguments fins a -source , o des del primer argument no opcional a la línia d'ordres. Les opcions -f i -source es poden utilitzar diverses vegades a la línia d'ordres. Gawk llegeix el text del programa com si tots els textos de l'arxiu del programa i de la línia d'ordres s'hagin concatenat junts. Això és útil per a la creació de biblioteques de funcions AWK, sense haver d'incloure'ls en cada nou programa AWK que els utilitza. També ofereix la possibilitat de barrejar funcions de biblioteca amb programes de línia d'ordres.

La variable d'entorn AWKPATH especifica una ruta de cerca que s'utilitzarà en trobar fitxers font amb l'opció -f . Si aquesta variable no existeix, la ruta predeterminada és ".: / Usr / local / share / awk" . (El directori real pot variar, depenent de com es va crear i instal·lar gawk ). Si un nom de fitxer donat a l'opció -f conté un caràcter `` / '', no es fa cap cerca de ruta.

Gawk executa els programes AWK en el següent ordre. Primer, totes les assignacions de variables especificades mitjançant l'opció -v es realitzen. A continuació, Gawk compila el programa en forma interna. A continuació, Gawk executa el codi al bloc (s) BEGIN (si n'hi ha), i després procedeix a llegir cada fitxer anomenat a la matriu ARGV . Si no hi ha cap fitxer indicat a la línia d'ordres, Gawk llegeix l'entrada estàndard.

Si un nom de fitxer a la línia d'ordres té la forma var = val , es tracta com una assignació de variables. La variable var serà assignada al valor val . (Això passa després que s'hagin executat els blocs BEGIN ). L'assignació de variables de la línia de comandaments és més útil per assignar valors dinàmics a les variables AWK usos per controlar com es trenca l'entrada en camps i registres. També és útil per controlar l'estat si es necessiten passis múltiples sobre un únic fitxer de dades.

Si el valor d'un determinat element d' ARGV està buit ( "" ), gawk salta sobre ell.

Per a cada registre de l'entrada, proves de gawk per veure si coincideix amb qualsevol patró del programa AWK. Per a cada patró que coincideix amb el registre, s'executa l' acció associada. Els patrons es comproven en l'ordre en què es produeixen al programa.

Finalment, una vegada s'esgota l'entrada, Gawk executa el codi en els blocs END (si n'hi ha).

Variables, registres i camps

Les variables AWK són dinàmiques; neixen quan es fan servir per primera vegada. Els seus valors són números o cadenes de coma flotants, o ambdues, depenent de com s'utilitzin. AWK també té matrius unidimensionals; es poden simular matrius amb múltiples dimensions. S'estableixen diverses variables predefinides a mesura que s'executa un programa; aquestes es descriuran segons sigui necessari i es resumeix a continuació.

Registres

Normalment, els registres estan separats per caràcters de nova línia. Podeu controlar com es separen els registres assignant valors a la variable RS incorporada. Si RS és un caràcter únic, aquest caràcter separa els registres. En cas contrari, RS és una expressió regular. El text de l'entrada que coincideix amb aquesta expressió regular separa el registre. Tanmateix, en mode de compatibilitat, només s'utilitza el primer caràcter del seu valor de cadena per separar registres. Si RS s'estableix a la cadena nul·la, els registres estan separats per línies en blanc. Quan RS s'estableix a la cadena nul·la, el caràcter de nova línia sempre actua com un separador de camp, a més del valor que tingui FS .

Camps

A mesura que es llegeix cada registre d'entrada, Gawk divideix el registre en camps , utilitzant el valor de la variable FS com a separador de camp. Si FS és un caràcter únic, els camps estan separats per aquest caràcter. Si FS és la cadena nul·la, cada caràcter individual es converteix en un camp separat. En cas contrari, s'espera que l' FS sigui una expressió regular completa. En el cas especial que FS és un espai únic, els camps estan separats per rutes d'espais i / o fitxes i / o línies noves. (Mireu la discussió de --posix , a continuació). NOTA: el valor de IGNORECASE (vegeu a continuació) també afecta la manera en què els camps es divideixen quan FS és una expressió regular, i com es separen els registres quan RS és una expressió regular.

Si la variable FIELDWIDTHS està establerta en una llista de números separada per espais, s'espera que cada camp tingui un ample fix, i Gawk divideix el registre utilitzant els amples especificats. S'ignora el valor de FS . Assignar un nou valor a FS invalida l'ús de FIELDWIDTHS i restaura el comportament predeterminat.

Cada camp del registre d'entrada es pot referenciar per la seva posició, $ 1 , $ 2 , etc. $ 0 és tot el registre. Els camps no necessiten referenciar-se per constants:

n = 5
imprimeix $ n

Imprimeix el cinquè camp del registre d'entrada.

La variable NF s'estableix en el nombre total de camps del registre d'entrada.

Les referències a camps inexistents (és a dir, camps després de $ NF ) produeixen la cadena nul·la. Tanmateix, assignar a un camp inexistent (per exemple, $ (NF + 2) = 5 ) augmenta el valor de NF , crea els camps que intervenen amb la cadena nul·la com el seu valor, i fa que el valor de $ 0 es recomputi, amb els camps estan separats pel valor de OFS . Les referències als camps numerats negatius provoquen un error greu. La disminució de NF provoca que els valors dels camps passin per perdre el nou valor, i el valor de $ 0 es recomputarà, amb els camps separats pel valor de OFS .

Assignar un valor a un camp existent fa que el registre sencer sigui reconstruït quan es fa referència a $ 0 . De la mateixa manera, assignar un valor a $ 0 fa que el registre es respliti, creant nous valors per als camps.

Variables incorporades

Les variables integrades de Gawk són:

ARGC

El nombre d'arguments de línia d'ordres (no inclou opcions per a gawk , ni l'origen del programa).

ARGIND

L'índex d' ARGV del fitxer actual que s'està processant.

ARGV

Matriu d'arguments de la línia d'ordres. La matriu està indexada de 0 a ARGC - 1. Canviar dinàmicament el contingut d' ARGV pot controlar els fitxers utilitzats per a les dades.

BINMODE

En sistemes no POSIX, especifica l'ús del mode `` binari '' per a totes les E / S d'arxius. Els valors numèrics d'1, 2 o 3 especifiquen que els fitxers d'entrada, els fitxers de sortida o tots els fitxers, respectivament, han d'utilitzar l'E / S binària. Els valors de cadena de "r" , o "w" especifiquen que els fitxers d'entrada o els fitxers de sortida, respectivament, han d'utilitzar l'E / S binària. Els valors de cadena de "rw" o "wr" especifiquen que tots els fitxers han d'utilitzar l'E / S binària. Qualsevol altre valor de cadena es tracta com "rw" , però genera un missatge d'advertència.

CONVFMT

El format de conversió dels números, "% .6g" , per defecte.

ENTORN

Una matriu que conté els valors de l'entorn actual. La matriu està indexada per les variables d'entorn, ja que cada element és el valor d'aquesta variable (p. Ex., ENVIRON ["HOME"] pot ser / home / arnold ). Si canvieu aquesta matriu, no afecta l'entorn que veuen els programes que generen spawns mitjançant redirecció o la funció del sistema () .

ERRNO

Si es produeix un error del sistema fent una redirecció de getline , durant una lectura per a getline o durant un tancament () , llavors ERRNO contindrà una cadena que descriu l'error. El valor està subjecte a la traducció en llocs no espanyols.

ÀREA DE CAMP

Una llista separada d'amples de camp d'espai en blanc. Quan s'estableix, Gawk analitza l'entrada en camps d'amplada fixa, en lloc d'utilitzar el valor de la variable FS com a separador de camp.

NOM DE L'ARXIU

El nom del fitxer d'entrada actual. Si no s'especifiquen fitxers a la línia d'ordres, el valor de FILENAME és `` - ''. Tanmateix, FILENAME no està definit dins del bloc BEGIN (tret que s'estableixi getline ).

FNR

El número de registre d'entrada al fitxer d'entrada actual.

FS

El separador de camp d'entrada, un espai per defecte. Vegeu els camps , a dalt.

Ignora't

Controla la sensibilitat entre majúscules i minúscules de totes les expressions regulars i operacions de cadena. Si IGNORECASE té un valor diferent de zero, llavors les comparacions de cordes i la coincidència de patrons en regles, la divisió de camps amb FS , el registre que separa amb RS , l'expressió regular que coincideix amb ~ i ! ~ , I el gensub () , gsub () , index () , la funció match () , split () i sub () integrada fa cas omís de les operacions d'expressió regulars. NOTA: la subscripció de matriu no es veu afectada ni la funció asort () .

Per tant, si IGNORECASE no és igual a zero, / aB / coincideix amb totes les cadenes "ab" , "aB" , "Ab" i "AB" . Igual que amb totes les variables AWK, el valor inicial de IGNORECASE és zero, de manera que totes les expressions regulars i les operacions de cadena normalment tenen majúscules i minúscules. Sota Unix, s'utilitza el joc de caràcters complet ISO 8859-1 Llatí-1 quan s'ignora el cas.

LINT

Proporciona un control dinàmic de l'opció -lint des d'un programa AWK. Quan és cert, Gawk imprimeix avisos de polze. Quan és fals, no ho fa. Quan se li assigna el valor de cadena "fatal" , les advertències de pèrdua es converteixen en errors fatals, exactament igual que --lint = fatal . Qualsevol altre valor veritable només imprimeix advertències.

NF

El nombre de camps del registre d'entrada actual.

NR

El nombre total de registres d'entrada registrats fins ara.

OFMT

El format de sortida dels números, "% .6g" , per defecte.

OFS

El separador de camp de sortida, un espai per defecte.

ORS

El separador de registre de sortida, de manera predeterminada, una línia nova.

PROCINFO

Els elements d'aquesta matriu proporcionen accés a informació sobre el programa AWK en curs. En alguns sistemes, pot haver elements de la matriu, "group1" a través de "group n " per a alguns n , que és la quantitat de grups complementaris que té el procés. Utilitzeu l'operador in per provar aquests elements. Estan disponibles els següents elements:

PROCINFO ["egid"]

el valor de la trucada getegid (2) del sistema.

PROCINFO ["euid"]

el valor de la crida del sistema geteuid (2).

PROCINFO ["FS"]

"FS" si la divisió de camp amb FS està en vigor, o "FIELDWIDTHS" si la divisió de camps amb FIELDWIDTHS està en vigor.

PROCINFO ["gid"]

el valor de la crida del sistema getgid (2).

PROCINFO ["pgrpid"]

l'identificador del grup de procés del procés actual.

PROCINFO ["pid"]

l'ID del procés del procés actual.

PROCINFO ["ppid"]

l'ID del procés principal del procés actual.

PROCINFO ["uid"]

el valor de la trucada getuid (2) del sistema.

RS

El separador de registre d'entrada, de manera predeterminada, una línia nova.

RT

El terminador de registre. Gawk estableix RT al text d'entrada que coincideix amb el caràcter o expressió regular especificada per RS .

RSTART

L'índex del primer caràcter que coincideix amb la coincidència () ; 0 si no hi ha cap coincidència. (Això implica que els índexs de caràcters comencen en un.)

RLENGTH

La longitud de la cadena relacionada amb la coincidència () ; -1 si no hi ha cap coincidència.

SUBSEP

El caràcter utilitzat per separar diversos subíndexs en elements de matriu, de manera predeterminada "\ 034" .

TEXTDOMAIN

El domini de text del programa AWK; usat per trobar les traduccions localitzades per a les cadenes del programa.

Matrius

Les matrius estan subscrites amb una expressió entre claudàtors ( [ i ] ). Si l'expressió és una llista d'expressions ( expr , expr ...), el subíndex de matriu és una cadena que consisteix en la concatenació del valor (cadena) de cada expressió, separada pel valor de la variable SUBSEP . Aquesta instal·lació s'utilitza per simular matrius multiplicades. Per exemple:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "hola, món \ n"

assigna la cadena "hola, món \ n" a l'element de la matriu x que està indexat per la cadena "A \ 034B \ 034C" . Totes les matrius d'AWK són associatives, és a dir, indexades per valors de cadena.

L'operador especial a pot ser usat en una declaració si o while per veure si una matriu té un índex que consisteix en un valor en particular.

si (val in array) matriu d'impressió [val]

Si la matriu té diversos subíndexs, utilitzeu (i, j) en la matriu .

La construcció també es pot utilitzar en un bucle for ifar per sobre de tots els elements d'una matriu.

Es pot eliminar un element d'una matriu mitjançant la instrucció delete . La instrucció delete també es pot utilitzar per eliminar tot el contingut d'una matriu, només especificant el nom de la matriu sense un subíndex.

Escriptura i conversió variables

Les variables i els camps poden ser (números flotants), o cadenes, o totes dues. La manera com s'interpreta el valor d'una variable depèn del seu context. Si s'utilitza en una expressió numèrica, es tractarà com un número, si s'utilitza com una cadena es tractarà com una cadena.

Per obligar a una variable a tractar-se com un número, afegiu-hi 0; per obligar-lo a tractar-se com una cadena, concatenar-lo amb la cadena nul·la.

Quan una cadena s'ha de convertir en un número, la conversió s'aconsegueix utilitzant strtod (3). Un número es converteix en una cadena mitjançant el valor de CONVFMT com una cadena de format per sprintf (3), amb el valor numèric de la variable com a argument. Tanmateix, tot i que tots els números de AWK són punts flotants, els valors integrals sempre es converteixen com a enters. Per tant, donat

CONVFMT = "% 2.2f" a = 12 b = a ""

la variable b té un valor de cadena de "12" i no de "12.00" .

Gawk fa comparacions de la següent manera: si dues variables són numèriques, es comparen numèricament. Si un valor és numèric i l'altre té un valor de cadena que és una cadena ``, '' llavors les comparacions també es fan de forma numèrica. En cas contrari, el valor numèric es converteix en una cadena i es fa una comparació de cadena. Es comparen dues cadenes, és clar, com a cadenes. Tingueu en compte que l'estàndard POSIX aplica el concepte de `` cadena numèrica '' a tot arreu, fins i tot a constants de cadena. Tanmateix, això és clarament incorrecte i Gawk no fa això. (Afortunadament, això es soluciona a la propera versió de l'estàndard).

Tingueu en compte que les constants de cadena, com ara "57" , no són cadenes numèriques, són constants de cadena. La idea de `` cadena numèrica '' només s'aplica als camps, entrada getLINE , elements FILENAME , ARGV , elements ENVIRON i els elements d'una matriu creada per split () que són cadenes numèriques. La idea bàsica és que l'entrada de l'usuari , i només l'entrada de l'usuari, que es veu numèrica, s'ha de tractar d'aquesta manera.

Les variables no inicialitzades tenen el valor numèric 0 i el valor de la cadena "" (la cadena nul·la o buida).

Constants octal i hexadecimal

A partir de la versió 3.1 de gawk, podeu utilitzar constants octals i hexadecimals d'estil C al codi font del programa AWK. Per exemple, el valor octal 011 és igual a un decimal 9 i el valor hexadecimal 0x11 és igual a un decimal 17.

Constants de cadena

Les constants de cadena en AWK són seqüències de caràcters tancats entre cometes dobles ( " ). Dintre de les cadenes, es reconeixen certes seqüències d'escapament , com a C. Aquests són:

\\

Una barra invertida literal.

\ a

El caràcter `` alert '' En general, el caràcter ASCII BEL.

\ b

espai enrere.

\ f

feed-form.

\ n

nova línia.

\ r

retorn de carro.

\ t

pestanya horitzontal.

\ v

pestaña vertical.

\ x dígits hexadecimals

El caràcter representat per la cadena de dígits hexadecimals seguint el \ x . Com en ANSIC, tots els següents dígits hexadecimals es consideren part de la seqüència d'escapament. (Aquesta funció ens hauria de dir alguna cosa sobre el disseny de llenguatges per comissió). Per exemple, "\ x1B" és el caràcter ASCIIESC (escapament).

\ ddd

El caràcter representat per la seqüència d'dígits 1, 2 o 3 dígits. Per exemple, "\ 033" és el caràcter ASCII ESC (escapament).

\ c

El caràcter literal c .

Les seqüències d'escapament també es poden utilitzar en expressions regulars constants (per exemple, / [\ t \ f \ n \ r \ v] / coincideixen amb caràcters d'espai en blanc).

En el mode de compatibilitat, els caràcters representats per seqüències d'escapament octal i hexadecimal es tracten literalment quan s'utilitzen en constants d'expressions regulars. Així, / a \ 52b / és equivalent a / a \ * b / .

Patrons i accions

AWK és un llenguatge orientat a la línia. El model apareix primer, i després l'acció. Les instruccions d'acció estan tancades a { i } . Pot ser que el patró no estigui disponible, o pot ser que falti l'acció, però, per descomptat, no tots dos. Si falta el patró, l'acció s'executa per a cada registre d'entrada. Una acció que falta és equivalent a

{ imprimir }

que imprimeix tot el registre.

Els comentaris comencen amb el caràcter `` # '' i continuen fins al final de la línia. Es poden utilitzar línies en blanc per separar les declaracions. Normalment, una declaració acaba amb una línia nova, no obstant això, aquest no és el cas de les línies que acaben en un fitxer ``, '', { , ? , : , && o || . Les línies que acaben fent o també tenen les seves declaracions automàticament continuades en la següent línia. En altres casos, es pot continuar una línia acabant amb una ', en aquest cas la nova línia serà ignorada.

Es poden establir múltiples afirmacions en una línia separant-les amb una ``; ''. Això s'aplica tant a les declaracions dins de la part d'acció d'un parell d'accions de patrons (el cas habitual) com a les declaracions de patrons-acció.

Patrons

Els patrons AWK poden ser un dels següents:

BEGIN END / expressió regular / patró d' expressió relacional & & patró de patró || patró de patró ? patró : patró ( patró ) ! patró pattern1 , patró2

BEGIN i END són dos tipus especials de patrons que no es compten amb l'entrada. Les parts d'acció de tots els patrons BEGIN es combinen com si totes les declaracions s'hagin escrit en un únic bloc BEGIN . S'executen abans que es llegeixi cap entrada. De la mateixa manera, tots els blocs END es combinen i s'executen quan s'esgota tota l'entrada (o quan s'executa una instrucció de sortida ). Els patrons BEGIN i END no es poden combinar amb altres patrons en expressions de patró. Els patrons BEGIN i END no poden tenir parts d'acció que falten.

Per / expressions / patrons regulars , la instrucció associada s'executa per cada registre d'entrada que coincideixi amb l'expressió regular. Les expressions regulars són iguals a les de egrep (1), i es resumeixen a continuació.

Una expressió relacional pot utilitzar qualsevol dels operadors definits a continuació a la secció sobre accions. Aquests generalment comproquen si determinats camps coincideixen amb certes expressions regulars.

The && , || , i ! Els operadors són lògics AND, OR lògics i NO lògics, respectivament, com a C. Fer avaluació de curtcircuit, també com en C, i s'utilitzen per combinar expressions de patrons més primitius. Com en la majoria dels idiomes, es poden utilitzar parèntesis per canviar l'ordre d'avaluació.

L'operador ?: És com el mateix operador en C. Si el primer patró és veritable, el patró utilitzat per a la prova és el segon patró, en cas contrari serà el tercer. Només s'avalua un dels patrons segon i tercer.

El model pattern1 , pattern2 d'una expressió s'anomena un patró de rang . Coincideix amb tots els registres d'entrada començant per un registre que coincideix amb el patró1 i continuant fins a un registre que coincideixi amb el patró2 inclusiu. No es combina amb cap altra expressió de patró.

Expressions regulars

Les expressions regulars són el tipus estès que es troba a egrep . Es componen de caràcters de la següent manera:

c

coincideix amb el caràcter no metacharacter c .

\ c

coincideix amb el caràcter literal c .

.

coincideix amb qualsevol caràcter que inclogui nova línia.

^

coincideix amb l'inici d'una cadena.

$

coincideix amb el final d'una cadena.

[ abc ... ]

llista de caràcters, coincideix amb qualsevol dels caràcters abc ...

[^ abc ... ]

llista de caràcters negats, coincideix amb qualsevol caràcter excepte abc ...

r1 | r2

alternança: coincideix amb r1 o r2 .

r1r2

concatenació: coincideix amb r1 , i després r2 .

r +

coincideix amb un o més r 's.

r *

coincideix amb zero o més r 's.

r ?

coincideix amb zero o un r 's.

( r )

agrupació: coincideix amb r .

r { n }

r { n ,}

r { n , m } Un o dos nombres dins de les claus denoten una expressió d'interval . Si hi ha un número a les claus, es repeteix l'expressió regular precedent r n vegades. Si hi ha dos nombres separats per una coma, r es repeteix entre n i m vegades. Si hi ha un número seguit d'una coma, llavors es repeteix almenys n vegades.

Les expressions d'intervals només estan disponibles si es defineix --posix o -re-interval en la línia d'ordres.

\ y

coincideix amb la cadena buida al principi o al final d'una paraula.

\ B

coincideix amb la cadena buida dins d'una paraula.

\ <

coincideix amb la cadena buida al principi d'una paraula.

\>

coincideix amb la cadena buida al final d'una paraula.

\ w

coincideix amb qualsevol caràcter constitutiu de la paraula (lletra, dígit o subratllat).

\ W

coincideix amb qualsevol caràcter que no sigui constituent de paraula.

\ `

coincideix amb la cadena buida al començament d'un buffer (cadena).

\ '

coincideix amb la cadena buida al final d'un buffer.

Les seqüències d'escapament que són vàlides en constants de cadena (vegeu a continuació) també són vàlides en expressions regulars.

Les classes de caràcters són una nova característica introduïda a l'estàndard POSIX. Una classe de caràcter és una notació especial per descriure llistes de caràcters que tenen un atribut específic, però on els propis caràcters poden variar de país a país o de caràcters a conjunt de caràcters. Per exemple, la noció del caràcter alfabètic és diferent als EUA i a França.

Una classe de caràcter només és vàlida en una expressió regular dins dels claudàtors d'una llista de caràcters. Les classes de caràcters consisteixen en [: una paraula clau que indica la classe i :] . Les classes de caràcters definides per l'estàndard POSIX són:

[: alnum:]

Caràcters alfanumèrics.

[: alfa:]

Caràcters alfabètics.

[:en blanc:]

Espai o caràcters de tabulació.

[: cntrl:]

Controla els personatges.

[:dígit:]

Caràcters numèrics.

[:gràfic:]

Personatges que són imprimibles i visibles. (Un espai és imprimible, però no visible, mentre que un a és ambdós.)

[:més baix:]

Caràcters alfabètics en minúscules.

[:imprimir:]

Caràcters imprimibles (caràcters que no són caràcters de control).

[: punt:]

Caràcters de puntuació (caràcters que no són lletra, dígits, caràcters de control o caràcters d'espai).

[: espai:]

Caràcters espacials (com ara espai, pestanya i formfeed, per citar alguns).

[: superior:]

Caràcters alfabètics en majúscules.

[: xdigit:]

Personatges que són dígits hexadecimals.

Per exemple, abans de l'estàndard POSIX, per fer coincidir els caràcters alfanumèrics, haureu d'escriure / [A-Za-z0-9] / . Si el vostre joc de caràcters tenia altres caràcters alfabètics, això no coincidirà amb ells, i si el vostre conjunt de caràcters es comparava de manera diferent a ASCII, potser no coincideixi amb els caràcters alfanumèrics ASCII. Amb les classes de caràcters POSIX, podeu escriure / [[: alnum:]] / , i això coincideix amb els caràcters alfabètics i numèrics del conjunt de caràcters.

Dues seqüències especials addicionals poden aparèixer a les llistes de caràcters. Aquests s'apliquen als conjunts de caràcters que no són ASCII, que poden tenir símbols simples (anomenats elements de compaginació ) que es representen amb més d'un caràcter, així com diversos caràcters que són equivalents per a la compilació o la classificació de propòsits. (Per exemple, en francès, un pla `` e '' i un accentuat greu`` són equivalents).

Enganxar símbols

Un símbol de compilació és un element de combinació de diversos caràcters que està tancat a [. i .] . Per exemple, si ch és un element de compilació, [[.ch.]] És una expressió regular que coincideix amb aquest element de compilació, mentre que [ch] és una expressió regular que coincideix amb c o h .

Classes d'equivalència

Una classe d'equivalència és un nom específic local per a una llista de caràcters que són equivalents. El nom està tancat a [= and =] . Per exemple, es pot utilitzar el nom e per representar tots els `` e, '' e ',' 'i `` e`.' 'En aquest cas, [[= e =]] és una expressió regular que coincideix amb qualsevol d' e , e ' o e` .

Aquestes característiques són molt valuoses en llocs que no parlen anglès. Les funcions de la biblioteca que utilitza GAWK per a les coincidències d'expressions regulars actualment només reconeixen classes de caràcters POSIX; no reconeixen símbols de compilació o classes d'equivalència.

Els operadors \ y , \ B , \ < , \> , \ w , \ W , \ " i \ ' són específics per gawk ; són extensions basades en instal·lacions de les biblioteques d'expressió regular de GNU.

Les diverses opcions de la línia d'ordres controlen com Gawk interpreta els caràcters en expressions regulars.

Sense opcions

En el cas predeterminat, Gawk proporciona totes les instal·lacions de les expressions regulars POSIX i els operadors d'expressió regular GNU descrits anteriorment. No obstant això, les expressions d'interval no són compatibles.

--posix

Només s'admeten expressions regulars POSIX, els operadors GNU no són especials. (Per exemple, \ w coincideix amb un literal w ). Es permeten expressions d'interval.

--tradicional

Les expressions regulars tradicionals d'Unix awk són igualades. Els operadors de GNU no són especials, les expressions d'intervals no estan disponibles, i tampoc no són les classes de caràcters POSIX ( [[: alnum:]] i així successivament). Els caràcters descrits per seqüències d'escapament octal i hexadecimal es tracten literalment, fins i tot si representen metacaracteres d'expressió regular.

--re interval

Permet expressions d'intervals en expressions regulars, fins i tot si s'ha proporcionat -tradicional .

Accions

Les instruccions d'acció estan tancades amb claus, { i } . Les declaracions d'acció consten de les declaracions habituals d'assignació, condicionals i repetides que es troben en la majoria dels idiomes. Els operadors, les instruccions de control i les declaracions d'entrada / sortida estan dissenyades després d'aquelles a C.

Operadors

Els operadors d'AWK, en ordre de disminució de prioritat, són

( ... )

Agrupació

$

Referència de camp.

++ -

Increment i decrement, tant de prefix com de postfix.

^

També es pot utilitzar l'exposició ( ** , i ** = per a l'operador d'assignació).

+ -!

Unary plus, unary minus i negació lògica.

* /%

Multiplicació, divisió i mòdul.

+ -

Addició i resta.

espai

Concatenació de cadenes.

<>

<=> =

! = == Els operadors relacionals regulars.

~! ~

Partit d'expressions regulars, coincidència negada. NOTA: No utilitzeu una expressió regular constant ( / foo / ) al costat esquerre d'un ~ o ! ~ . Només feu servir un a la dreta. L'expressió / foo / ~ exp té el mateix significat que (($ 0 ~ / foo /) ~ exp ) . Això no sol ser el que es pretenia.

in

Membres matricials.

&&

Lògica AND.

||

OR lògic.

?:

L'expressió condicional C Té la forma expr1 ? expr2 : expr3 . Si expr1 és cert, el valor de l'expressió és expr2 , altrament és expr3 . Només s'avalua un expr2 i expr3 .

= + = - =

* = / =% = ^ = Tasca. Tant l'assignació absoluta ( var = valor ) com l'assignació de l'operador (els altres formularis) són compatibles.

Instruccions de control

Les instruccions de control són les següents:

if ( condition ) statement [ else statement ] while statement ( statement ) statement while statement ( condition ) for ( expr1 ; expr2 ; expr3 ) statement for ( var in array ) statement break continue delete matrix [ index ] delete array exit [ expression ] { declaracions }

Instruccions d'E / S

Les declaracions d'entrada / sortida són les següents:

tancar ( fitxer [ , com ] )

Tancar fitxer, canonada o coprocessament. L'opcional com s'ha d'utilitzar només quan es tanca un extrem d'un conducte bidireccional a un coprocessament. Ha de ser un valor de cadena, ja sigui "a" o "des de" .

getline

Establiu $ 0 al registre d'entrada següent; establir NF , NR , FNR .

getline < fitxer

Establiu 0 € al proper registre del fitxer ; establir NF .

getline var

Estableix var del següent registre d'entrada; establir NR , FNR .

getline var < fitxer

Estableix var del proper registre de fitxer .

ordre | getline [ var ]

Executeu l' ordre canalitzant la sortida a $ 0 o var , com a dalt.

comanda | & getline [ var ]

Executeu com a procés de codificació la sortida a $ 0 o var , com a dalt. Els coprocessos són una extensió de gawk .

Pròxim

Deixa de processar el registre d'entrada actual. El registre d'entrada següent es llegeix i el procés comença amb el primer patró del programa AWK. Si s'acaba el final de les dades d'entrada, s'executen els blocs END , si n'hi ha.

nextfile

Deixa de processar el fitxer d'entrada actual. El següent registre d'entrada llegit ve del següent fitxer d'entrada. FILENAME i ARGIND s'actualitzen, FNR es restablirà a 1, i el processament s'inicia amb el primer patró del programa AWK. Si s'acaba el final de les dades d'entrada, s'executen els blocs END , si n'hi ha.

imprimir

Imprimeix el registre actual. El registre de sortida es rescindeix amb el valor de la variable ORS .

imprimir llista expr

Imprimeix expressions. Cada expressió està separada pel valor de la variable OFS . El registre de sortida es rescindeix amb el valor de la variable ORS .

print expr-list > file

Imprimeix expressions en el fitxer . Cada expressió està separada pel valor de la variable OFS . El registre de sortida es rescindeix amb el valor de la variable ORS .

printf fmt, expr-list

Format i impressió.

printf fmt, expr-list > file

Format i impressió en el fitxer .

sistema ( cmd-line )

Executeu la comanda cmd-line i torneu l'estat de sortida. (És possible que no estigui disponible en sistemes que no siguin POSIX.)

fflush ( [ fitxer ] )

Elimineu qualsevol memòria intermèdia associada amb el fitxer de sortida o fitxer de canals oberts. Si falta un fitxer , la sortida estàndard es buida. Si el fitxer és la cadena nul·la, tots els fitxers de sortida oberts i les canonades tenen els seus buffers en blanc.

Es permeten redireccions de sortida addicionals per imprimir i printf .

imprimir ... >> fitxer

afegeix la sortida al fitxer .

imprimir ... | comandament

escriu sobre una canonada.

print ... | & command

envia dades a un coprocessament.

La comanda getline retorna 0 a l'extrem del fitxer i -1 en un error. Després d'un error, ERRNO conté una cadena que descriu el problema.

NOTA: si s'utilitza una canonada o un coprocessament per obtenir connexió , o des d' impressió o printf dins d'un bucle, haureu d' utilitzar a prop () per crear noves instàncies del comandament. AWK no tanca automàticament les canonades ni els coprocessos quan retornen EOF.

La declaració printf

Les versions AWK de la declaració printf i la funció sprintf () segueixen els següents formats d'especificació de conversió:

% c

Un caràcter ASCII. Si l'argument utilitzat per a % c és numèric, es tracta com un caràcter i s'imprimeix. En cas contrari, se suposa que l'argument és una cadena i s'imprimeix l'únic primer caràcter d'aquesta cadena.

% d , % i

Un nombre decimal (la part sencera).

% e,% E

Un número de coma flotant del formulari [-] d.dddddde [+ -] dd . El format % E utilitza E en comptes de e .

% f

Un número de coma flotant del formulari [-] ddd.dddddd .

%bona partida

Utilitzeu la conversió % e o % f , el que sigui més curt, amb supersols no significatius suprimits. El format % G utilitza % E en comptes de % e .

% o

Un nombre octal sense signar (també un enter).

% u Un nombre decimal sense signe (de nou, un enter).

% s

Cadena de caràcters.

% x,% X

Un número hexadecimal sense signar (un enter). El format % X utilitza ABCDEF en comptes de abcdef .

%%

Un sol caràcter % no es converteix cap argument.

Els paràmetres addicionals opcionals poden estar entre el % i la lletra de control:

comptar $

Utilitzeu l'argument ' count ' en aquest punt del format. Això s'anomena especificador de posició i està pensat principalment per al seu ús en versions traduïdes de cadenes de format, no en el text original d'un programa AWK. És una extensió de gawk .

-

L'expressió s'ha d'esquerra-justificada dins del seu camp.

espai

Per a conversions numèriques, prefixeu valors positius amb un espai i valors negatius amb un signe menys.

+

El signe més, usat abans del modificador d'amplada (vegeu a continuació), diu que sempre proporcioni un signe per a conversions numèriques, fins i tot si les dades que es formularan són positives. El + supera el modificador de l'espai.

#

Utilitzeu una "forma alternativa" per a certes lletres de control. Per a % o , proporcioneu un zero inicial. Per a % x i % X , proporcioneu un resultat 0x o 0X per a un resultat diferent de zero. Per % e , % E i % f , el resultat sempre conté un punt decimal. Per % g i % G , els zeros posteriors no s'eliminen del resultat.

0

Un líder 0 (zero) actua com a indicador, que indica que la sortida hauria d'estar acolchada amb zero en comptes d'espais. Això s'aplica fins i tot a formats de sortida no numèrics. Aquesta bandera només té efecte quan l'amplada del camp és més ample que el valor que s'ha d'imprimir.

amplada

El camp s'ha d'emplenar a aquest ample. El camp normalment està acolorit amb espais. Si s'ha utilitzat el pavelló 0 , s'adapta a zero.

. prec

Un número que especifica la precisió que s'ha d'utilitzar en imprimir. Per als formats % e , % E i % f , això especifica el nombre de dígits que voleu imprimir a la dreta del punt decimal. Per als formats % g i % G , especifica el nombre màxim de dígits significatius. Per als formats % d , % o , % i , % u , % x , i % X , especifica el nombre mínim de dígits que voleu imprimir. En % s , especifica el nombre màxim de caràcters de la cadena que s'ha d'imprimir.

L' amplada dinàmica i les capacitats prec de les rutines ANSI C printf () són compatibles. A * en lloc de les especificacions d' ample o prec, provoca que els seus valors es prenguin de la llista d'arguments a printf o sprintf () . Per utilitzar un especificador de posició amb un ample o precisió dinàmic, proporcioneu el recompte $ després del * en la cadena de format. Per exemple, "% 3 $ * 2 $. * 1 $ s" .

Noms especials d'arxius

Quan es fa la redirecció d'E / S tant si s'imprimeix com si s'imprimeix en un fitxer, o mitjançant getline d'un fitxer, Gawk reconeix certs noms de fitxers especials internament. Aquests noms de fitxer permeten accedir als descriptors d'arxius oberts heretats del procés primari de gawk (normalment el shell). Aquests noms de fitxer també es poden utilitzar a la línia d'ordres per nomenar fitxers de dades. Els noms dels fitxers són:

/ dev / stdin

L'entrada estàndard.

/ dev / stdout

La sortida estàndard.

/ dev / stderr

La sortida d'error estàndard.

/ dev / fd / n

El fitxer associat al descriptor de fitxer obert n .

Aquests són especialment útils per als missatges d'error. Per exemple:

imprimir "¡Vau volar!" > "/ dev / stderr"

mentre que d'altra manera hauríeu d'usar

imprimir "¡Vau volar!" | "gat 1> i 2"

Els noms de fitxers especials següents es poden utilitzar amb l'operador de & co-process per crear connexions de xarxa TCP / IP.

/ inet / tcp / lport / rhost / rport

Arxiu per a la connexió TCP / IP al port local port a rhost host remot al port rport remot. Utilitzeu un port de 0 perquè el sistema triï un port.

/ inet / udp / lport / rhost / rport

Similar, però utilitzeu UDP / IP en lloc de TCP / IP.

/ inet / raw / lport / rhost / rport

Reservat per a ús futur.

Altres noms de fitxer especials proporcionen accés a informació sobre el procés de gawk en execució. Aquests noms de fitxer ja estan obsolets. Utilitzeu la matriu PROCINFO per obtenir la informació que proporcionen. Els noms dels fitxers són:

/ dev / pid

Si es llegeix aquest fitxer, es torna l'ID del procés del procés actual, en decimal, acabat amb una línia nova.

/ dev / ppid

En llegir aquest fitxer, es torna l'ID del procés principal del procés actual, en decimal, acabada amb una línia nova.

/ dev / pgrpid

En llegir aquest fitxer, es torna l'ID del grup de procés del procés actual, en decimal, acabada amb una línia nova.

/ dev / usuari

En llegir aquest fitxer, es torna un registre únic acabat amb una línia nova. Els camps estan separats amb espais. $ 1 és el valor de la trucada del sistema getuid (2), $ 2 és el valor de la crida del sistema geteuid (2), $ 3 és el valor de la crida del sistema getgid (2) i $ 4 és el valor del getegid (2) crida al sistema. Si hi ha camps addicionals, són les identificacions de grup retornades per getgroups (2). És possible que diversos grups no estiguin suportats en tots els sistemes.

Funcions numèriques

AWK té les següents funcions aritmètiques incorporades:

atan2 ( i , x )

Retorna l'arctangent de i / x en radians.

cos ( expr )

Retorna el cosinus de expr , que es troba en radians.

exp ( expr )

La funció exponencial.

int ( expr )

Trunca l'enter.

registre ( expr )

La funció del logaritme natural.

rand ()

Retorna un nombre aleatori entre 0 i 1.

pecat ( expr )

Retorna el seno de expr , que es troba en radians.

sqrt ( expr )

La funció arrel quadrada.

srand ( [ expr ] )

Utilitza expr com una nova llavor per al generador de nombres aleatoris. Si no es proporciona cap expr, s'utilitza l'hora del dia. El valor retornat és la llavor anterior per al generador de nombres aleatoris.

Funcions de cadena

Gawk té les següents funcions integrades de cadena:

asort ( s [ , d ] )

Retorna la quantitat d'elements de la matriu d'origen s . Els continguts de s s'ordenen utilitzant les normes normals de gawk per comparar valors i els índexs dels valors ordenats de s es reemplacen per enters enters seqüencials que comencen per 1. Si s'especifica la matriu opcional de destinació d , llavors es repeteix per primera vegada en d , i després d està ordenat, deixant els índexs de la matriu d'origen sense canvis.

gensub ( r , s , h [ , t ] )

Cerqueu la cadena de destinació t per a les coincidències de l'expressió regular r . Si h és una cadena que comença amb g o G , reemplaça totes les coincidències de r amb s . En cas contrari, h és un número que indica quina coincidència de r substituirà. Si no es proporciona, s'utilitza $ 0 . Dins del text de reemplaçament s , la seqüència \ n , on n és un dígit de l'1 al 9, es pot utilitzar per indicar només el text que coincideix amb la subexpressió entre parèntesis n '. La seqüència \ 0 representa tot el text coincident, igual que el caràcter & . A diferència de sub () i gsub () , la cadena modificada es retorna com a resultat de la funció i la cadena de destinació original no es canvia.

gsub ( r , s [ , t ] )

Per a cada subcadena que coincideixi amb l'expressió regular r de la cadena t , substitueixi la cadena s i retorni el nombre de substitucions. Si no es proporciona, utilitzeu $ 0 . Un & al text de reemplaçament es reemplaça amb el text que realment coincideix. Utilitzeu \ & per obtenir un & literal. (Això ha de ser escrit com "\\ &" ; veure GAWK: Programació AWK eficaç per a una discussió més àmplia sobre les regles de & 's i les barres inverses en el text de reemplaçament de sub () , gsub () i gensub ()) .

índex ( s , t )

Retorna l'índex de la cadena t a la cadena s , o 0 si no està present. (Això implica que els índexs de caràcters comencen en un.)

durada ( [ s ] )

Retorna la longitud de la cadena s o la longitud de $ 0 si s no es proporciona.

partit ( s , r [ , a ] )

Retorna la posició en s on es dóna l'expressió regular r , o 0 si r no està present, i estableix els valors de RSTART i RLENGTH . Tingueu en compte que l'ordre d'argument és el mateix que l'operador ~ : str ~ re . Si es proporciona una matriu, es esborra un i els elements 1 a n s'omplen amb les parts de s que coincideixen amb la subexpressió parèntesis corresponent a r . El 0 ítem d' un conté la part de s emparejada per tota l'expressió regular r .

dividir ( s , a [ , r ] )

Divideix la cadena s en la matriu una a l'expressió regular r , i retorna la quantitat de camps. Si s'omet R , s'utilitza el FS . La matriu a és eliminada primer. La divisió es comporta de manera idèntica a la divisió de camp, descrita anteriorment.

sprintf ( fmt , expr-list )

Imprimeix la llista expr segons fmt , i retorna la cadena resultant.

strtonum ( str )

Examina str i retorna el seu valor numèric. Si str comença amb un 0 principal, strtonum () suposa que str és un nombre octal. Si str comença amb un 0x o 0X principal , strtonum () suposa que str és un nombre hexadecimal.

sub ( r , s [ , t ] )

Igual que Gsub () , però només se substitueix la primera subcadena coincident.

substr ( s , i [ , n ] )

Retorna com a màxim la subcadena n de caràcters que comença a i . Si n s'omet, s'utilitza la resta de s .

tolower ( str )

Ofereix una còpia de la cadena str , amb tots els caràcters en majúscula de str traduïts a les seves contrapartides corresponents en minúscules. Els caràcters no alfabètics no es canvien.

toupper ( str )

Ofereix una còpia de la cadena str , amb tots els caràcters en minúscules de str traduïts a les seves contraparts de majúscules corresponents. Els caràcters no alfabètics no es canvien.

Funcions de temps

Atès que un dels usos primaris dels programes AWK és processar fitxers de registre que contenen informació sobre el segell de temps, Gawk proporciona les següents funcions per obtenir segells de temps i formatar-los.

mktime ( datespec )

Rurns dataspec en un segell de temps de la mateixa forma que el retornat per systime () . El dataspec és una cadena de la forma AYY MM DD HH MM SS [DST] . Els continguts de la cadena són sis o set nombres que representen, respectivament, tot l'any, inclòs el segle, el mes de l'1 al 12, el dia del mes de l'1 al 31, l'hora del dia de 0 a 23, el minut de 0 a 59, i el segon de 0 a 60, i una bandera opcional de seguretat. Els valors d'aquests números no necessiten estar dins dels intervals especificats; per exemple, una hora de -1 significa 1 hora abans de la mitjanit. S'assumeix el calendari gregorià d'origen zero, amb l'any 0 anterior a l'any 1 i l'any -1 anterior a l'any 0. S'assumeix que el temps és a la zona horària local. Si la marca d'estiu és positiva, se suposa que el temps és estalviador de llum de dia; si és zero, se suposa que el temps és estàndard; i si és negatiu (per defecte), mktime () intenta determinar si el temps d'estalvi de llum està vigent durant el temps especificat. Si dataspec no conté prou elements o si el temps resultant està fora de rang, mktime () retorna -1.

strftime ( [ format [ , timestamp ]] )

Formata la marca de temps d' acord amb l'especificació en format. La marca de temps ha de ser de la mateixa forma que el retornat per systime () . Si falta la marca de temps, s'utilitza l'hora actual. Si falta el format, s'utilitza un format predeterminat equivalent a la sortida de la data (1). Consulteu l'especificació de la funció strftime () en ANSI C per a les conversions de format que es garanteixen que estiguin disponibles. Una versió de domini públic de strftime (3) i una pàgina d'home per a això vénen amb gawk ; si aquesta versió es va utilitzar per crear Gawk , totes les conversions descrites a la pàgina d'aquest manual estan disponibles per a Gawk.

systime ()

Retorna l'hora actual com el nombre de segons des de l'època (1970-01-01 00:00:00 UTC en sistemes POSIX).

Funcions de manipulació de bits

A partir de la versió 3.1 de gawk , hi ha disponibles les següents funcions de manipulació de bits. Funcionen mitjançant la conversió de valors de punt flotant de doble precisió a enters enters sense signar , fent l'operació i, posteriorment, convertir el resultat en un punt flotant. Les funcions són:

i ( v1 , v2 )

Retorna l'AND bit a bit dels valors proporcionats per v1 i v2 .

compl ( val )

Retorna el complement de bits bit a bit.

lshift ( val , count )

Retorna el valor de val , desplaçat deixat per bits de compte .

o ( v1 , v2 )

Retorna l'OR bit a bit dels valors proporcionats per v1 i v2 .

rshift ( val , count )

Retorna el valor de val , desplaçat directament per bits de compte .

xor ( v1 , v2 )

Retorna el XOR bit a bit dels valors proporcionats per v1 i v2 .

Funcions d'internacionalització

A partir de la versió 3.1 de gawk , es poden utilitzar les següents funcions des del vostre programa AWK per traduir cadenes en temps d'execució. Per obtenir-ne més detalls, consulteu GAWK: Programació efectiva de AWK .

bindtextdomain ( directori [ , domini ] )

Especifica el directori on gawk busca els fitxers .mo , en cas que no es puguin o no es col·loquin a les ubicacions "estàndard" (per exemple, durant la prova). Retorna el directori on el domini està `` enllaçat ''.

El domini predeterminat és el valor de TEXTDOMAIN . Si el directori és la cadena nul·la ( "" ), bindtextdomain () retorna l'enllaç actual per al domini donat.

dcgettext ( cadena [ , domini [ , categoria ]]

Retorna la traducció de la cadena al domini del domini de text per a la categoria de categoria local. El valor predeterminat del domini és el valor actual de TEXTDOMAIN . El valor predeterminat per a la categoria és "LC_MESSAGES" .

Si proporcioneu un valor per a la categoria , ha de ser una cadena igual a una de les categories regionals conegudes descrites a GAWK: Programació efectiva de AWK . També heu d'enviar un domini de text. Utilitzeu TEXTDOMAIN si voleu utilitzar el domini actual.

dcngettext ( cadena1 , cadena2 , número [ , domini [ , categoria ]] )

Retorna la forma plural utilitzada per al nombre de la traducció de string1 i string2 en el domini del domini de text per a la categoria de categoria local. El valor predeterminat del domini és el valor actual de TEXTDOMAIN . El valor predeterminat per a la categoria és "LC_MESSAGES" .

Si proporcioneu un valor per a la categoria , ha de ser una cadena igual a una de les categories regionals conegudes descrites a GAWK: Programació efectiva de AWK . També heu d'enviar un domini de text. Utilitzeu TEXTDOMAIN si voleu utilitzar el domini actual.

FUNCIONS DEFINITADES DE L'USUARI

Les funcions d'AWK es defineixen de la manera següent:

nom de la funció ( llista de paràmetres ) ( declaracions )

Les funcions s'executen quan es diuen des de dins de les expressions en patrons o accions. Els paràmetres reals proporcionats a la crida a funció s'utilitzen per crear instàncies dels paràmetres formals declarats a la funció. Les matrius es passen per referència, altres variables es passen per valor.

Com que les funcions no formaven part del llenguatge AWK, la provisió per a variables locals és bastant maldestre: es declaren com a paràmetres addicionals a la llista de paràmetres. La convenció és separar les variables locals de paràmetres reals per espais addicionals a la llista de paràmetres. Per exemple:

funció f (p, q, a, b) # a i b són locals (...) / abc / {...; f (1, 2); ...}

El parèntesi esquerre en una crida a funció és obligatori per seguir immediatament el nom de la funció, sense cap espai en blanc que intervingui. Això és per evitar una ambigüitat sintàctica amb l'operador de concatenació. Aquesta restricció no s'aplica a les funcions incorporades que figuren més amunt.

Les funcions es poden trucar i poden ser recursives. Els paràmetres de funció utilitzats com a variables locals s'inicialitzen a la cadena nul·la i al número zero després de la invocació de la funció.

Utilitzeu expr de retorn per retornar un valor d'una funció. El valor retornat no està definit si no s'ofereix cap valor, o si la funció retorna per `` caure '' del final.

Si s'ha proporcionat el tipus de lletra , Gawk avisa sobre les trucades a funcions no definides en temps d'anàlisi, en comptes d'en temps d'execució. Trucar a una funció no definida en temps d'execució és un error greu.

La paraula func es pot utilitzar en lloc de la funció .

CÀRREGA DINÀMICA DE NOVES FUNCIONS

A partir de la versió 3.1 de Gawk , podeu afegir dinàmicament noves funcions incorporades a l'intèrpret de gawk en execució. Les dades completes estan fora de l'abast d'aquesta pàgina de manual; vegeu GAWK: Programació AWK eficaç per als detalls.

extensió ( objecte , funció )

Vincula dinàmicament el fitxer d'objectes compartits anomenat per objecte , i invoca la funció en aquest objecte, per realitzar la inicialització. Aquests s'han de proporcionar tant com a cadenes. Retorna el valor retornat per la funció .

Aquesta funció es proporciona i es documenta a GAWK: la programació efectiva de AWK , però tot el que passa amb aquesta funció és probable que canviï en el pròxim llançament. Recomanem STRONGLY que no feu servir aquesta funció per res que no vulgueu tornar a fer.

SENYALS

pgawk accepta dos senyals. SIGUSR1 fa que es bolqui una pila de trucades de perfil i funció al fitxer de perfil, que és awkprof.out , o qualsevol que sigui el nom de l'arxiu amb l'opció --profile . A continuació, continua corrent. SIGHUP fa que es bolqui el perfil i la crida a la funció i després sortiu.

EXEMPLES

Imprimiu i classifiqueu els noms d'inici de sessió de tots els usuaris: BEGIN {FS = ":"} {print $ 1 | "sort") Comptar línies en un fitxer: {nlines ++} END {print nlines} Precedeix cada línia pel seu número al fitxer: {print FNR, $ 0} concatenate i número de línia (una variació d'un tema): {print NR, $ 0}

Internalización

Les constants de cadena són seqüències de caràcters tancats en cometes dobles. En entorns de parla no anglesa, és possible marcar cadenes al programa AWK que requereixen la traducció al llenguatge natural natiu. Aquestes cadenes estan marcades al programa AWK amb un guió baix destacat (`` _ ''). Per exemple,

gawk 'BEGIN {print "hola, món"}'

sempre imprimeix hola, món . Però,

gawk 'BEGIN {print _ "hola, món"}'

podria imprimir bonjour, monde a França.

Hi ha diversos passos en la producció i execució d'un programa AWK localitzable.

1.

Afegiu una acció BEGIN per assignar un valor a la variable TEXTDOMAIN per establir el domini de text en un nom associat al vostre programa.


BEGIN {TEXTDOMAIN = "myprog"}

Això permet a Gawk trobar el fitxer .mo associat al vostre programa. Sense aquest pas, Gawk utilitza el domini de missatges de text, que probablement no conté traduccions per al vostre programa.

2.

Marqueu totes les cadenes que s'han de traduir amb subratllats destacats.

3.

Si és necessari, utilitzeu les funcions dcgettext () i / o bindtextdomain () al vostre programa, segons correspongui.

4.

Executeu gawk --gen-po -f myprog.awk> myprog.po per generar un fitxer .po per al vostre programa.

5.

Proporcioneu traduccions adequades i compileu i instal·leu un fitxer .mo corresponent.

Les característiques d'internacionalització es descriuen amb detall en GAWK: Programació efectiva de AWK .

Compatibilitat Posix

Un objectiu principal per gawk és la compatibilitat amb l'estàndard POSIX, així com amb la versió més recent d'UNIX awk . Per això, Gawk incorpora les següents característiques visibles de l'usuari que no es descriuen en el llibre AWK, sinó que formen part de la versió de awk de Bell Laboratories, i es troben en l'estàndard POSIX.

El llibre indica que la assignació de la variable de línia d'ordres ocorre quan awk obriria l'argument com un arxiu, que després de executar el bloc BEGIN . Tanmateix, en implementacions anteriors, quan aquesta tasca es va mostrar abans que qualsevol nom del fitxer, l'assignació es produiria abans que s'executi el bloc BEGIN . Les aplicacions van dependre d'aquesta característica ``. '' Quan awk es va canviar per coincidir amb la seva documentació, es va afegir l'opció -v per assignar variables abans de l'execució del programa per donar cabuda a les aplicacions que depenien del comportament anterior. (Aquesta característica ha estat acordada tant per Bell Laboratories com pels desenvolupadors de GNU.)

L'opció -W per a funcions específiques d'implementació és de l'estàndard POSIX.

Quan es processen arguments, Gawk utilitza l'opció especial `` - '' per indicar el final dels arguments. En el mode de compatibilitat, s'adverteix, però altrament ignora opcions no definides. En el funcionament normal, aquests arguments es transmeten al programa AWK perquè es processi.

El llibre AWK no defineix el valor retornat de srand () . L'estàndard POSIX li torna la llavor que estava utilitzant, per permetre fer un seguiment de les seqüències de números aleatoris. Per tant, srand () in gawk també torna la seva llavor actual.

Altres funcions noves són: L'ús de múltiples opcions -f (de MKS awk ); la matriu ENVIRON ; les seqüències d'escapament \ a , i \ v (fetes originalment en gawk i retornades a la versió de Bell Laboratories); les funcions integrades (tolower () i toupper () incorporades (des de la versió de Bell Laboratories); i les especificacions de conversió ANSI C a printf (primer fet a la versió de Bell Laboratories).

Característiques històriques

Hi ha dues característiques de les implementacions històriques d'AWK compatibles amb gawk . En primer lloc, és possible trucar a la funció de longitud () incorporada no només amb cap argument, però fins i tot sense parèntesis. Per tant,

a = longitud # Holy Algol 60, Batman!

És igual que qualsevol de

a = longitud ()
a = longitud ($ 0)

Aquesta característica està marcada com `` obsoleta '' en l'estàndard POSIX, i Gawk emet una advertència sobre el seu ús si s'especifica --lint a la línia d'ordres.

L'altra característica és l'ús de les declaracions de continu o de descans fora del cos d'un temps , per fer o fer un bucle. Les implementacions tradicionals d'AWK han tractat aquest ús com equivalent a la propera declaració. Gawk dóna suport a aquest ús si s'ha especificat -tradicional .

Extensions de GNU

Gawk té una sèrie d'extensions a POSIX awk . Es descriuen en aquesta secció. Totes les extensions que es descriuen aquí es poden desactivar invocant gawk amb l'opció tradicional .

Les funcions següents de gawk no estan disponibles a POSIX awk .

*

No es fa cap cerca de ruta per als fitxers anomenats mitjançant l'opció -f . Per tant, la variable d'entorn AWKPATH no és especial.

*

La seqüència d'escapament \ x . (Desactivat amb --posix )

*

La funció fflush () . (Desactivat amb --posix )

*

La capacitat de continuar línies després ? i :. (Desactivat amb --posix )

*

Constants octal i hexadecimal en els programes AWK.

*

Les variables ARGIND , BINMODE , ERRNO , LINT , RT i TEXTDOMAIN no són especials.

*

La variable IGNORECASE i els seus efectes secundaris no estan disponibles.

*

La divisió de camp de longitud FIELDWIDTHS i d'amplada fixa.

*

La matriu PROCINFO no està disponible.

*

L'ús de RS com a expressió regular.

*

Els noms de fitxers especials disponibles per a la redirecció d'E / S no es reconeixen.

*

L'operador | & per crear co-processos.

*

La possibilitat de dividir els caràcters individuals utilitzant la cadena nul·la com a valor de FS , i com a tercer argument per dividir () .

*

El segon argument opcional a la funció close () .

*

El tercer argument opcional per a la funció match () .

*

La capacitat d'utilitzar els especificadors de posició amb printf i sprintf () .

*

L'ús de la matriu d'eliminació per eliminar tot el contingut d'una matriu.

*

L'ús del nextfile per abandonar el processament del fitxer d'entrada actual.

*

El i () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () o () , rshift () , strftime () , strtonum () , systime () i xor () .

*

Cordes localitzables.

*

Afegiu noves funcions integrades dinàmicament amb la funció extension () .

El llibre AWK no defineix el valor retornat de la funció close () . El tancament de Gawk () retorna el valor de fclose (3), o pclose (3), al tancar un fitxer de sortida o canonada, respectivament. Retorna l'estat de sortida del procés quan es tanca una canonada d'entrada. El valor de retorn és -1 si no es va obrir el fitxer, la canonada o el coprocessament amb una redirecció.

Quan s'invoca gawk amb l'opció -tradicional , si l'argument fs a l'opció -F és `` t '', llavors FS s'estableix al caràcter de la tauleta . Tingueu en compte que escriure gawk -F \ t ... simplement fa que el shell digui el `` t '', i no passa `` \ t '' a l'opció -F . Atès que es tracta d'un cas especial bastant lleig, no és el comportament predeterminat. Aquest comportament també no es produeix si s'ha especificat --posix . Per obtenir realment un caràcter de fitxa com a separador de camp, el millor és utilitzar cometes simples: gawk -F '\ t' ...

Vegeu altres ordres : espera , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , a , qui , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp