Aprende o comando Linux - gawk

Nome

gawk - escaneo de patróns e linguaxe de procesamento

Sinopse

gawk [opcións de estilo POSIX ou GNU] -f ficheiro de programa [ - ] arquivo ...
gawk [Opcións de estilo POSIX ou GNU] [ - ] ficheiro de programa-texto ...

pgawk [opcións de estilo POSIX ou GNU] -f ficheiro de programa [ - ] arquivo ...
pgawk [Opcións de estilo POSIX ou GNU] [ - ] ficheiro de programa-texto ...

Descrición

Gawk é a implementación do proxecto GNU da linguaxe de programación AWK. Adáptase á definición da linguaxe no estándar POSIX 1003.2 Command Language And Utilities. Esta versión á súa vez baséase na descrición en The AWK Programming Language , de Aho, Kernighan e Weinberger, coas características adicionais que se atopan na versión de System V Release 4 de UNIX awk . Gawk tamén ofrece extensións awk de Bell Laboratories máis recentes e unha serie de extensións específicas de GNU.

Pgawk é a versión de perfil de gawk . É idéntico en todos os sentidos, excepto que os programas executan máis lentamente e automáticamente produce un perfil de execución no arquivo awkprof.out cando está feito. Vexa a opción --profile seguinte.

A liña de comando consta de opcións para evitar, o texto do programa AWK (se non se fornece a través das opcións -f ou - file ), e os valores estarán dispoñibles nas variables AWG predefinidas ARGC e ARGV .

Formato de opción

As opcións de Gawk poden ser opcións tradicionais dunha carta de POSIX ou opcións de estilo GNU longas. As opcións POSIX comezan cun só `` - '', mentres que as opcións longas comezan con `` - ''. Existen opcións longas para as características específicas GNU e para as funcións mandadas por POSIX.

Seguindo o estándar POSIX, as opcións específicas de gawk fornécense mediante argumentos á opción -W . Pode fornecer varias opcións -W. Cada opción -W ten unha opción longa correspondente, como se detalla a continuación. Os argumentos para as opcións longas únense coa opción por un signo = , sen espazos intermedios ou poden ser proporcionados no seguinte argumento da liña de comandos. As opcións longas poden ser abreviadas, sempre que a abreviatura sexa única.

Opcións

Gawk acepta as seguintes opcións, listadas alfabéticamente.

-F fs

--field-separator fs Use fs para o separador de campo de entrada (o valor da variable predefinida FS ).

-v var = val

--assign var = val Asigne o valor val á variable var , antes de que comézese a execución do programa. Estes valores variables están dispoñibles para o bloque BEGIN dun programa AWK.

-f ficheiro de programa

- ficheiro de programa de ficheiro Ler a orixe do programa AWK desde o arquivo de programa de arquivo , no canto do primeiro argumento de liña de comandos. Pode usarse varias opcións -f (ou -file ).

-mf NNN

-mr NNN Estableza varios límites de memoria para o valor NNN . A marca f fixa o número máximo de campos e a marca R fixa o tamaño máximo de rexistro. Estas dúas bandeiras ea opción -m son da versión de investigación de Bell Laboratories de UNIX awk . Son ignorados por gawk , xa que gawk non ten límites predefinidos.

-W compat

-W tradicional

--compat

- Run tradicional no modo de compatibilidade . No modo de compatibilidade, gawk compórtase de forma idéntica a UNIX awk ; non se recoñecen ningunha das extensións específicas de GNU. O uso de --tradicional é preferido sobre as outras formas desta opción. Consulte Extensións de GNU a continuación para obter máis información.

-W copyleft

-W dereitos de autor

--copyleft

--copyright Imprime a versión curta da mensaxe de información do copyright GNU na saída estándar e saia correctamente.

-W dump-variables [ = ficheiro ]

--dump-variables [ = ficheiro ] Imprime unha lista ordenada de variables globais, os seus tipos e os seus valores finais ao arquivo . Se non se fornece ningún ficheiro , Gawk usa un ficheiro chamado awkvars.out no directorio actual.

Ter unha lista de todas as variables globais é unha boa forma de buscar erros tipográficos nos teus programas. Tamén usaría esta opción se ten un gran programa con moitas funcións e quere asegurarse de que as súas funcións non utilizan sen querer as variables globais que pretendía ser local. (Este é un erro particularmente sinxelo de facer con nomes de variables simples como i , j , etc.).

-A axuda

Uso de W

- axuda

- Escriba un resumo relativamente curto das opcións dispoñibles na saída estándar. (Por estándares de codificación GNU , estas opcións causan unha saída inmediata e exitosa).

-W pelusa [ = fatal ]

--lint [ = mortal ] Proporciona avisos sobre construcións que son dubidosas ou non portátiles para outras implementacións de Windows. Cun argumento opcional de fatal , as advertencias de pelusa pasan a ser erróneos. Isto pode ser drástico, pero o seu uso seguramente promoverá o desenvolvemento de programas máis limpos de AWK.

-Vintrodujo

--lint-old Proporciona advertencias sobre construcións que non son portátiles para a versión orixinal de Unix awk .

-W gen-po

--gen-po Escanear e analizar o programa AWK e xerar un ficheiro de formato GNU .po en saída estándar con entradas para todas as cadeas localizables no programa. O programa en si non se executa. Vexa a distribución GNU gettext para obter máis información sobre os ficheiros .po .

-W datos non decimais

--non-decimal-data Recoñecer valores octal e hexadecimal nos datos de entrada. Usa esta opción con gran precaución!

-O posix

--posix Isto activa o modo de compatibilidade , coas seguintes restricións adicionais:

*

\ x as secuencias de escape non son recoñecidas.

*

Só espazo e tabulación actúan como separadores de campo cando o FS está configurado nun só espazo, a nova liña non.

*

Non podes seguir as liñas despois ? e :.

*

Non se recoñece o func sinónimo da función de palabras clave.

*

Os operadores ** e ** = non se poden usar no lugar de ^ e ^ = .

*

A función fflush () non está dispoñible.

-W perfil [ = prof_file ]

--profile [ = prof_file ] Enviar datos de perfil a prof_file . O valor predeterminado é awkprof.out . Cando se executa con gawk , o perfil é só unha versión `` bastante impresa '' do programa. Cando se executa con pgawk , o perfil contén contas de execución de cada afirmación do programa na marxe esquerda e os recortes de chamadas de función para cada función definida polo usuario.

-V reintervalo

--re-interval Habilita o uso de expresións de intervalo en correspondencia de expresións regulares (consulte Expresións regulares , debaixo). As expresións de intervalo non estaban dispoñibles tradicionalmente na linguaxe AWK. Engadiuse o estándar POSIX, para que awk e egrep sexan consistentes entre si. Non obstante, o seu uso pode provocar os vellos programas AWK, polo que Gawk só os fornece se son solicitados con esta opción ou cando se especifica --posix .

-W fonte -texto do programa

--source -program-text Use programa-texto como código fonte do programa AWK. Esta opción permite a fácil combinación das funcións da biblioteca (empregadas a través das opcións -f e -file ) co código fonte introducido na liña de comandos. Está destinado principalmente para programas AWK medianos ou grandes que se usan nos scripts shell.

-W versión

--version Imprime a información da versión para esta copia en particular da gawk na saída estándar. Isto é útil principalmente para saber se a copia actual de gawk no teu sistema está actualizada con respecto a calquera que distribúe a Free Software Foundation. Isto tamén é útil cando se informan erros. (Por estándares de codificación GNU , estas opcións causan unha saída inmediata e exitosa).

- Indica o fin das opcións. Isto é útil para permitir máis argumentos para o propio programa AWK para comezar cun `` - ''. Isto é principalmente por coherencia coa convención de análise de argumentos usada pola maioría dos outros programas POSIX.

No modo de compatibilidade, as outras opcións están marcadas como non válidas, pero se non se ignoran. En funcionamento normal, a condición de que se proporcione o texto do programa, as opcións descoñecidas pasan ao programa AWK da matriz ARGV para o seu procesamento. Isto é particularmente útil para executar programas AWK a través do mecanismo de intérprete executable `` #! ''.

EXECUCIÓN PROGRAMA AWK

Un programa AWK consiste nunha secuencia de declaracións de patrón-acción e definicións de funcións opcionais.

patrón { declaracións de acción }

nome da función ( lista de parámetros ) { declaracións }

Gawk primeiro le a fonte do programa desde o arquivo (s) do programa se se especifica, desde argumentos a -source ou desde o primeiro argumento non opcional na liña de comandos. As opcións -f e -source pódense usar varias veces na liña de comandos. Gawk le o texto do programa coma se tivesen concatenados todos os textos de orixe do programa e orixe da liña de comandos. Isto é útil para a creación de bibliotecas de funcións AWK, sen ter que incluílas en cada novo programa AWK que as utilice. Tamén ofrece a posibilidade de mesturar as funcións da biblioteca cos programas de liña de comandos.

A variábel de entorno AWKPATH especifica unha ruta de busca para usar cando se atopan ficheiros fonte co nome -f . Se esta variable non existe, o camiño predeterminado é ".: / Usr / local / share / awk" . (O directorio real pode variar, dependendo de como se construíu e instala o gawk ). Se un nome de ficheiro dado á opción -f contén un carácter `` / '', non se realiza ningunha busca de camiño.

Gawk executa os programas AWK no seguinte orde. En primeiro lugar, realízanse todas as asignacións de variables especificadas mediante a opción -v . A continuación, Gawk compila o programa nunha forma interna. Entón, Gawk executa o código nos bloques BEGIN (se hai) e despois leva cada arquivo nomeado na matriz ARGV . Se non hai ficheiros nomeados na liña de comandos, Gawk le a entrada estándar.

Se un nome de ficheiro na liña de comando ten a forma var = val , trátase como unha asignación de variables. A variable var asignarase o valor val . (Isto sucede despois de que se executaron os bloques BEGIN ). A asignación de variables da liña de comandos é máis útil para asignar valores dinámicamente ás variables AWK usadas para controlar como a entrada está rota en campos e rexistros. Tamén é útil para controlar o estado se se necesitan múltiples pases nun único ficheiro de datos.

Se o valor dun determinado elemento de ARGV está baleiro ( "" ), gawk sábeo sobre el.

Para cada rexistro da entrada, as probas de Gawk para ver se coincide con calquera patrón no programa AWK. Para cada patrón que coincida co rexistro, a acción asociada é executada. Os patróns son probados na orde que se producen no programa.

Finalmente, despois de que se agota toda a entrada, Gawk executa o código no bloque (s) END (se hai).

Variables, rexistros e campos

As variables AWK son dinámicas; eles entran en existencia cando son utilizados por primeira vez. Os seus valores son números de punto flotante ou cadeas, ou ambos, dependendo de como se usen. AWK tamén ten matrices unidimensionais; pódense simular matrices con dimensións múltiples. Varias variables definidas previamente son establecidas a medida que se executa un programa; Estes serán descritos como necesarios e resumidos a continuación.

Rexistros

Normalmente, os rexistros están separados por caracteres de nova liña. Pode controlar como se separan os rexistros asignando valores á variable RS integrada. Se RS é un único personaxe, ese carácter separa os rexistros. Se non, RS é unha expresión regular. O texto na entrada que coincide con esta expresión regular separa o rexistro. Non obstante, no modo de compatibilidade, só se usa o primeiro carácter do seu valor de cadea para separar os rexistros. Se RS está configurado na cadea nula, os rexistros están separados por liñas en branco. Cando RS está configurado na cadea nula, o carácter de liña nova sempre funciona como separador de campo, ademais de calquera valor FS que poida ter.

Campos

Ao ler cada rexistro de entrada, Gawk divide o rexistro en campos , empregando o valor da variable FS como separador de campo. Se FS é un único carácter, os campos están separados por ese carácter. Se FS é a cadea nula, cada carácter individual convértese nun campo separado. Se non, FS deberá ser unha expresión regular completa. No caso especial de que FS é un espazo único, os campos están separados por pistas de espazos e / ou pestañas e / ou liñas novas. (Pero vexa a discusión de --posix , debaixo). NOTA: O valor de IGNORECASE (ver a continuación) tamén afecta a forma en que os campos se dividen cando FS é unha expresión regular, e como os rexistros están separados cando RS é unha expresión regular.

Se a variable FIELDWIDTHS está configurada nunha lista de números separada por espazo, espérase que cada campo teña ancho fixo, e Gawk divide o rexistro usando os anchos especificados. O valor de FS é ignorado. Asignar un novo valor a FS anula o uso de FIELDWIDTHS e restaurar o comportamento predeterminado.

Cada campo do rexistro de entrada pode referenciar a súa posición, $ 1 , $ 2 , etc. $ 0 é o rexistro completo. Os campos non precisan ser referenciados por constantes:

n = 5
imprimir $ n

imprime o quinto campo no rexistro de entrada.

A variable NF está axustada ao número total de campos no rexistro de entrada.

As referencias a campos inexistentes (campos despois de $ NF ) producen a cadea nula. Non obstante, asignar a un campo inexistente (por exemplo, $ (NF + 2) = 5 ) aumenta o valor de NF , crea os campos intermedios coa cadea nula como o seu valor e fai que o valor de $ 0 sexa recomputado, con os campos están separados polo valor de OFS . As referencias aos campos numerados negativos provocan un erro fatal. O descenso de NF fai que os valores dos campos pasen por perdendo o novo valor e que o valor de $ 0 sexa recomputado, separándose os campos polo valor de OFS .

Asignar un valor a un campo existente fai que todo o rexistro sexa reconstruído cando se fai referencia a $ 0 . Do mesmo xeito, asignar un valor a $ 0 fai que o rexistro se resplit, creando novos valores para os campos.

Variables incorporadas

As variables incorporadas de Gawk son:

ARGC

O número de argumentos da liña de comandos (non inclúe opcións para gawk ou a fonte do programa).

ARGIND

O índice en ARGV do ficheiro actual a procesar.

ARGV

Array de argumentos da liña de ordes. A matriz está indexada de 0 a ARGC - 1. Cambiar dinámicamente o contido de ARGV pode controlar os ficheiros empregados para os datos.

BINMODE

En sistemas non POSIX, especifica o uso do modo `` binario '' para todas as E / S de arquivos. Os valores numéricos de 1, 2 ou 3, especifican que os ficheiros de entrada, os ficheiros de saída ou todos os ficheiros, respectivamente, deberían usar a E / S binario. Os valores de cadea de "r" ou "w" especifican que os ficheiros de entrada ou os ficheiros de saída, respectivamente, deberían usar as E / S binarias. Os valores de cadea de "rw" ou "wr" especifican que todos os ficheiros deben usar I / O binario. Calquera outro valor de cadea trátase como "rw" , pero xera unha mensaxe de advertencia.

CONVFMT

O formato de conversión para números, "% .6g" , por defecto.

ENVIRON

Unha matriz que contén os valores do ambiente actual. A matriz está indexada polas variables de entorno, sendo cada elemento o valor desta variable (por exemplo, ENVIRON ["HOME"] pode ser / home / arnold ). Cambiar esta matriz non afecta o ambiente visto por programas que xera spawns a través da redirección ou a función do sistema () .

ERRNO

Se se produce un erro do sistema facendo unha redirección para getline , durante unha lectura para getline ou durante un final () , ERRNO conterá unha cadea que describe o erro. O valor está suxeito a tradución en lugares non ingleses.

ÁMBITOS DE CAMPO

Unha lista separada de espazos de espazo por espazo branco. Cando está configurado, Gawk analiza a entrada en campos de ancho fixo, no canto de usar o valor da variable FS como separador de campo.

NOME DE ARQUIVO

O nome do ficheiro de entrada actual. Se non se especifican ficheiros na liña de comandos, o valor de FILENAME é `` - ''. Non obstante, FILENAME está indefinido dentro do bloque BEGIN (a non ser que estableza getline ).

FNR

O número de rexistro de entrada no ficheiro de entrada actual.

FS

O separador de campo de entrada, un espazo por defecto. Vexa os campos arriba.

IGNORECASE

Controla a case-sensibilidade de todas as expresións regulares e as operacións de cadea. Se IGNORECASE ten un valor non cero, entón as comparacións de cordas e a correspondencia de patrón nas regras, a división de campo con FS , a gravación que separa con RS , a expresión regular que coincide con ~ e ! ~ , Eo gensub () , gsub () , index () Funcións integradas () , divididas () e sub () integradas ignoran todo ao facer operacións de expresión regulares. NOTA: A subscrición de matrices non está afectada, nin a función asort () .

Deste xeito, se IGNORECASE non é igual a cero, / aB / coincide con todas as cadeas "ab" , "aB" , "Ab" e "AB" . Do mesmo xeito que ocorre con todas as variables AWK, o valor inicial de IGNORECASE é cero, polo que as expresións regulares e as operacións de cadea normalmente son maiúsculas e minúsculas. En Unix, o conxunto completo de caracteres ISO 8859-1 Latin-1 úsase ao ignorar o caso.

LINT

Ofrece control dinámico da opción --intel dentro dun programa AWK. Cando é verdadeiro, gawk imprime avisos de perda. Cando falso, non. Cando se lle atribúe o valor de cadea "fatal" , as advertencias de pelusa pasan a ser erróneos , exactamente como --lint = fatal . Calquera outro valor verdadeiro só imprime avisos.

NF

Número de campos no rexistro de entrada actual.

NR

Número total de rexistros de entrada vistos ata o momento.

OFMT

O formato de saída para números, "% .6g" , por defecto.

OFS

O separador de campo de saída, un espazo por defecto.

ORS

O separador de rexistro de saída, por defecto, unha liña nova.

PROCINFO

Os elementos desta matriz permiten acceder a información sobre o programa AWK en execución. Nalgúns sistemas, pode haber elementos da matriz, "group1" a través de "group n " para algúns n , que é o número de grupos suplementarios que ten o proceso. Use o operador in para probar estes elementos. Están dispoñibles os seguintes elementos:

PROCINFO ["egid"]

o valor da chamada do sistema getegid (2).

PROCINFO ["euid"]

o valor da chamada do sistema geteuid (2).

PROCINFO ["FS"]

"FS" se a división de campo con FS está en vigor, ou "FIELDWIDTHS" se a división de campo con FIELDWIDTHS está en vigor.

PROCINFO ["gid"]

o valor da chamada do sistema getgid (2).

PROCINFO ["pgrpid"]

a ID do grupo de proceso do proceso actual.

PROCINFO ["pid"]

a ID do proceso do proceso actual.

PROCINFO ["ppid"]

ID do proceso primario do proceso actual.

PROCINFO ["uid"]

o valor da chamada do sistema getuid (2).

RS

O separador de rexistro de entrada, por defecto, unha liña nova.

RT

O terminador de rexistro. Gawk establece RT ao texto de entrada que coincide co carácter ou expresión regular especificada por RS .

RSTART

O índice do primeiro carácter correspondente por coincidencia () ; 0 se non hai coincidencia. (Isto implica que os índices de caracteres comezan nun.)

RLENGTH

A lonxitude da corda combinada por coincidencia () ; -1 se non hai coincidencia.

SUBSEP

O carácter usado para separar varios subíndices en elementos do conxunto, por defecto "\ 034" .

TEXTDOMAIN

O dominio de texto do programa AWK; usado para atopar as traducións localizadas para as cadeas do programa.

Arrays

As matrices están subscritas cunha expresión entre corchetes ( [ e ] ). Se a expresión é unha lista de expresións ( expr , expr ...) entón o subíndice de matriz é unha cadea que consiste na concatenación do valor (cadea) de cada expresión, separado polo valor da variable SUBSEP . Esta instalación utilízase para simular as matrices de dimensións multiplicadas. Por exemplo:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "hello, mundo \ n"

asigna a cadea "hello, world \ n" ao elemento da matriz x que está indexado pola cadea "A \ 034B \ 034C" . Todas as matrices en AWK son asociativas, é dicir indexadas por valores de cadea.

O operador especial no pode ser usado nunha declaración si ou mentres para ver se unha matriz ten un índice que consta dun valor en particular.

se (val in array) matriz de impresión [val]

Se a matriz ten varios subíndices, use (i, j) na matriz .

O en construír tamén pode ser usado nun for loop para iterar sobre todos os elementos dunha matriz.

Pode eliminarse un elemento dunha matriz empregando a instrución delete . A declaración de eliminación tamén se pode usar para eliminar todo o contido dunha matriz, só especificando o nome da matriz sen un subíndice.

Escritura e conversión variables

As variables e os campos poden ser números (cadros flotantes), ou cadea ou ambos. Como se interpreta o valor dunha variable depende do seu contexto. Se se usa nunha expresión numérica, será tratada como un número, se se usa como unha cadea será tratada como unha cadea.

Para forzar unha variable a ser tratada como un número, engada 0 a el; para obrigalo a ser tratado como unha cadea, concéntanos coa cadea nula.

Cando unha cadea debe ser convertida a un número, a conversión realízase usando strtod (3). Un número converteuse nunha cadea empregando o valor de CONVFMT como unha cadea de formato para sprintf (3), co valor numérico da variable como argumento. Non obstante, aínda que todos os números de AWK son puntos flotantes, os valores integrais sempre se converten como enteiros. Así, dado

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

a variable b ten un valor de cadea de "12" e non de "12.00" .

Gawk realiza comparacións do seguinte xeito: Se dúas variables son numéricos, compáranse numéricamente. Se un valor é numérico eo outro ten un valor de cadea que é unha cadea ``, '' entón as comparacións tamén se fan de forma numérica. En caso contrario, o valor numérico convértese nunha cadea e realízase unha comparación de cadea. Dúas cordas son comparadas, por suposto, como cordas. Teña en conta que o estándar POSIX aplica o concepto de `` cadea numérica '' en todas partes, mesmo para constantes de cadea. Non obstante, isto é claramente incorrecto e Gawk non fai isto. (Afortunadamente, isto fíxase na próxima versión do estándar).

Teña en conta que as constantes de cadea, como "57" , non son cadea numérica, son constantes de cadea. A idea de `` cadea numérica '' só se aplica aos campos, entrada getLINE , FILENAME , elementos ARGV, elementos ENVIRON e os elementos dunha matriz creada por split () que son cadeas numéricas. A idea básica é que a entrada do usuario , e só a entrada do usuario, que ten un aspecto numérico, debería tratarse así.

As variables non inicializadas teñen o valor numérico 0 eo valor da cadea "" (a cadea nula ou baleira).

Constantes octal e hexadecimal

Comezando coa versión 3.1 de gawk, pode usar constantes octal e hexadecimal de estilo C no seu código fonte do programa AWK. Por exemplo, o valor octal 011 é igual a decimal 9 eo valor hexadecimal 0x11 é igual a decimal 17.

Constantes de cordas

As constantes de cadea en AWK son secuencias de caracteres entre dúas comiñas dobres ( " ). Dentro das secuencias, recoñécense certas secuencias de escape , como en C. Estas son:

\\

Unha barra invertida literal.

\ a

O carácter `` alert '' Normalmente o carácter ASCII BEL.

\ b

retroceso.

\ f

feed de formularios.

\ n

nova liña.

\ r

retorno de carro.

\ t

pestana horizontal.

\ v

pestaña vertical.

\ x díxitos hex

O carácter representado pola secuencia de díxitos hexadecimales seguinte á \ x . Como en ANSIC, todos os seguintes díxitos hexadecimales son considerados parte da secuencia de escape. (Esta función debería dicirnos algo sobre deseño de linguaxe por comisión). Por exemplo, "\ x1B" é o personaxe ASCIIESC (escape).

\ ddd

O carácter representado pola secuencia de díxitos 1, 2 ou 3 díxitos. Por exemplo, "\ 033" é o carácter ASCII ESC (escape).

\ c

O carácter literal c .

As secuencias de escape tamén se poden usar dentro de expresións regulares constantes (por exemplo, / [\ t \ f \ n \ r \ v] / corresponden a caracteres de espazo en branco).

No modo de compatibilidade, os caracteres representados por secuencias de escape octal e hexadecimal son tratados literalmente cando se usan en constantes de expresión regular. Así, / a \ 52b / é equivalente a / a \ * b / .

Patróns e accións

AWK é unha linguaxe orientada a unha liña. O patrón vén primeiro, e despois a acción. As declaracións de acción están incluídas en { e } . Ou o patrón pode estar desaparecido, ou a acción pode faltar, pero, por suposto, non tanto. Se falta o patrón, a acción execútase para cada rexistro de entrada. A acción faltante equivale a

{print}

que imprime todo o rexistro.

Os comentarios comezan co carácter `` # '' e continúan ata o final da liña. As liñas en branco poden usarse para separar as declaracións. Normalmente, unha declaración termina cunha nova liña; con todo, este non é o caso das liñas que terminan nun ``, '', { , ? , : , && , ou || . As liñas que terminan ou tamén teñen as súas afirmacións continuaron automaticamente na seguinte liña. Noutros casos, pódese continuar unha liña rematada cun ', caso en que se ignorará a nova liña.

Múltiples declaracións poden ser colocadas nunha liña separándoas cun ``; ''. Isto aplícase tanto ás declaracións dentro da parte de acción dun par patrón-acción (o caso habitual) como ás declaracións de patrón-acción.

Patróns

Os patróns AWK poden ser un dos seguintes:

Comezar fin / expresión regular / patrón de expresión relacional & & patrón estándar || estándar de patrón ? patrón : patrón ( estándar ) ! patrón pattern1 , pattern2

BEGIN e END son dous tipos especiais de patróns que non se comparan coa entrada. As partes de acción de todos os patróns BEGIN únense como se todas as declaracións foran escritas nun só bloque BEGIN . Executáronse antes de ler calquera das entradas. Do mesmo xeito, todos os bloques END fusionáronse e executáronse cando toda a entrada está esgotada (ou cando se executa unha instrución de saída ). Os patróns BEGIN e END non se poden combinar con outros patróns en expresións estándar. Os patróns BEGIN e END non poden ter partes de acción perdidas.

Para / expresión regular / patróns, a instrución asociada execútase para cada rexistro de entrada que coincide coa expresión regular. As expresións regulares son iguais ás de egrep (1) e resúmense a continuación.

Unha expresión relacional pode empregar calquera dos operadores definidos a continuación na sección de accións. Estes xeralmente proban se certos campos coinciden con certas expresións regulares.

The && , || , e Os operadores son lóxicos AND, OR lóxicos e NOT lóxicos, respectivamente, como en C. Eles fan a avaliación de cortocircuítos, tamén como en C, e úsanse para combinar expresións de patrón máis primitivas. Como na maioría dos idiomas, pódense utilizar parénteses para cambiar a orde de avaliación.

O operador?: É como o mesmo operador en C. Se o primeiro patrón é verdadeiro, o patrón usado para a proba é o segundo patrón, se non, é o terceiro. Só se evalúa un dos segundo e terceiro patróns.

A forma pattern1 , pattern2 dunha expresión chámase patrón de intervalo . Ela coincide con todos os rexistros de entrada que comezan cun rexistro que coincide co patrón1 e continúa ata un rexistro que coincida co padrón2 , inclusivo. Non se combina con ningún outro tipo de expresión de patrón.

Expresións regulares

As expresións regulares son o tipo estendido atopado en egrep . Están compostos de personaxes como segue:

c

coincide co non-metacharacter c .

\ c

coincide co carácter literal c .

.

coincide con calquera carácter que inclúa nova liña.

^

coincide co comezo dunha cadea.

$

coincide co final dunha cadea.

[ abc ... ]

lista de caracteres, coincide con calquera dos caracteres abc ....

[^ abc ... ]

A lista de caracteres negados coincide con calquera outro personaxe excepto abc ....

r1 | r2

alternación: coincide con r1 ou r2 .

r1r2

concatenación: coincide con r1 e despois r2 .

r +

coincide cunha ou máis r 's.

r *

coincide con cero ou máis r 's.

r ?

coincide con cero ou un r 's.

( r )

agrupación: coincidencias r .

r { n }

r { n ,}

r { n , m } Un ou dous números dentro das teclas denotan unha expresión de intervalo . Se hai un número nos aparellos, repetirase a expresión regular anterior r n veces. Se hai dous números separados por unha coma, r repítese n a m veces. Se hai un número seguido dunha coma, entón r repetirase polo menos n veces.

As expresións de intervalo só están dispoñibles se se especifica --posix ou --re-interval na liña de comandos.

\ y

coincide coa cadea baleira ao comezo ou ao final dunha palabra.

\ B

coincide coa cadea baleira dentro dunha palabra.

\ <

coincide coa cadea baleira ao comezo dunha palabra.

\>

coincide coa cadea baleira ao final dunha palabra.

\ w

coincide con calquera carácter constitutivo de palabra (letra, díxitos ou subliñado).

\ W

coincide con calquera carácter que non sexa compoñente de palabras.

\ `

coincide coa cadea baleira ao comezo dun buffer (cadea).

\ '

coincide coa cadea baleira ao final dun buffer.

As secuencias de escape válidas en constantes de cordas (ver a continuación) tamén son válidas en expresións regulares.

As clases de carácter son unha nova característica introducida no estándar POSIX. Unha clase de carácter é unha notación especial para describir listas de caracteres que teñen un atributo específico, pero onde os propios personaxes reais poden variar de país a país e / ou de conxunto de caracteres a conxunto de caracteres. Por exemplo, a noción de carácter alfabético difire en EE. UU. E en Francia.

Unha clase de carácter só é válida nunha expresión regular dentro dos corchetes dunha lista de caracteres. As clases de caracteres están compostas por [: , unha palabra crave que denota a clase e :] . As clases de caracteres definidas polo estándar POSIX son:

[: alnum:]

Carácteres alfanuméricos.

[: alfa:]

Personaxes alfabeticos.

[: en branco:]

Espazos ou caracteres de tabulación.

[: cntrl:]

Controla os caracteres.

[: díxito:]

Carácteres numéricos.

[: gráfico:]

Caracteres que son imprimibles e visibles. (Un espazo é imprimíbel, pero non visible, mentres que un a é ambos.)

[: inferior:]

Caracteres alfabéticos en minúsculas.

[: imprimir:]

Caracteres imprimibles (caracteres que non son caracteres de control).

[: punct:]

Caracteres de puntuación (caracteres que non son letra, díxitos, caracteres de control ou caracteres de espazo).

[: espazo:]

Os caracteres espaciais (como o espazo, o separador e o formato, por citar algúns).

[: superior:]

Caracteres alfabéticos en maiúsculas.

[: xdigit:]

Caracteres que son díxitos hexadecimales.

Por exemplo, antes do estándar POSIX, para coincidir cos caracteres alfanuméricos, terías que escribir / [A-Za-z0-9] / . Se o seu conxunto de caracteres tiña outros caracteres alfabéticos nela, isto non coincidiría con eles, e se o seu conxunto de caracteres se combinaba de forma diferente de ASCII, isto pode non coincidir cos caracteres alfanuméricos ASCII. Coas clases de carácteres POSIX, pode escribir / [[: alnum:]] / , e isto coincide cos caracteres alfabéticos e numéricos no seu conxunto de caracteres.

Dúas secuencias especiais adicionais poden aparecer nas listas de caracteres. Estes son aplicables a conxuntos de caracteres non ASCII, que poden ter símbolos individuais (chamados elementos de compilación ) que están representados con máis dun carácter, así como varios caracteres equivalentes para a recollida ou a selección de propósitos. (Por exemplo, en francés, unha sinxela `` e '' e unha e` acentuada en graves son equivalentes).

Símbolos de combinación

Un símbolo de combinación é un elemento de combinación de varios caracteres incluído en [. e .] . Por exemplo, se ch é un elemento de combinación, entón [[.ch.]] É unha expresión regular que coincide con este elemento de combinación, mentres que [ch] é unha expresión regular que coincide con c ou h .

Clases de equivalencia

Unha clase de equivalencia é un nome específico de localización para unha lista de caracteres equivalentes. O nome está en [= e =] . Por exemplo, o nome e pode usarse para representar todos os `` e, '' e ',' 'e `` e`.' 'Neste caso, [[= e =]] é unha expresión regular que coincide con calquera de e , e ' ou e` .

Estas características son moi valiosas en locais que non falan inglés. As funcións da biblioteca que usa GAWK para coincidencias de expresións regulares actualmente só recoñecen as clases de caracteres POSIX; Non recoñecen os símbolos de combinación ou as clases de equivalencia.

Os operadores \ y , \ B , \ < , \> , \ w , \ W , \ " e \ ' son específicos para gawk ; son extensións baseadas nas instalacións das bibliotecas de expresión regular GNU.

As varias opcións da liña de comandos controlan como gawk interpreta caracteres en expresións regulares.

Sen opcións

No caso predeterminado, Gawk proporciona todas as instalacións das expresións regulares POSIX e os operadores de expresión regular GNU descritos anteriormente. Non obstante, as expresións de intervalo non son compatibles.

--posix

Só se admiten expresións regulares POSIX, os operadores GNU non son especiais. (Por exemplo, \ w coincide cunha w literal). Expresións de intervalo están permitidas.

--tradicional

As expresións regulares de Unix awk tradicionais son compatibles. Os operadores de GNU non son especiais, as expresións de intervalo non están dispoñibles e tampouco son as clases de caracteres POSIX ( [[: alnum:]] e outras). Os caracteres descritos polas secuencias de escape octal e hexadecimal son tratados literalmente, mesmo se representan metacaracteres de expresión regular.

--re intervalo

Permitir expresións de intervalo en expresións regulares, mesmo se fornece -tradicional .

Accións

As declaracións de acción están encerradas nas teclas, { e } . As declaracións de acción consisten nas declaracións habituais de asignación, condicional e bucal atopadas na maioría das linguas. Os operadores, as instrucións de control e as declaracións de entrada / saída dispoñibles están modeladas despois das de C.

Operadores

Os operadores de AWK, en orde de prevalencia decreciente, son

( ... )

Agrupación

$

Referencia de campo.

++ -

Incremento e decremento, tanto prefixo como postfix.

^

Exponenciación ( ** tamén se pode usar e ** = para o operador de asignación).

+ -!

Unary plus, unary minus e negación lóxica.

* /%

Multiplicación, división e módulo.

+ -

Adición e resta.

espazo

Cadea de concatenación.

<>

<=> =

! = == Os operadores relacionales regulares.

~! ~

Partida de expresión regular, coincidencia negativa. NOTA: Non use unha expresión regular constante ( / foo / ) no lado esquerdo dunha ~ ou ! ~ . Só use un no lado dereito. A expresión / foo / ~ exp ten o mesmo significado que (($ 0 ~ / foo /) ~ exp ) . Este non adoita ser o que se pretendía.

en

Membro do matriz.

&&

Lóxico AND.

||

OR lóxico.

?:

A expresión condicional C. Isto ten a forma expr1 ? expr2 : expr3 . Se expr1 é verdadeiro, o valor da expresión é expr2 , se non, é expr3 . Só se evalúa un dos expr2 e expr3 .

= + = - =

* = / =% = ^ = Asignación. Tanto a asignación absoluta ( var = valor ) como a asignación do operador (as demais formas) son compatibles.

Declaracións de control

As declaracións de control son as seguintes:

se a declaración ( condición ) [ outra declaración ] mentres que a condición ( condición ) fai declaración mentres ( condición ) para ( expr1 ; expr2 ; expr3 ) declaración para ( var na matriz ) salto de declaración continuar borrar matriz [ índice ] eliminar matriz salir [ expresión ] { declaracións }

Declaracións de E / S

As declaracións de entrada / saída son as seguintes:

pechar ( ficheiro [ , como ] )

Pechar ficheiro, canalizar ou coprocesar. O opcional como se debe empregar só ao pechar un extremo dun tubo de dúas vías para un coprocesamento. Debe ser un valor de cadea, ou "a" ou "de" .

getline

Establece $ 0 do seguinte rexistro de entrada; establecer NF , NR , FNR .

getline < ficheiro

Establece $ 0 do seguinte rexistro do ficheiro ; establecer NF .

getline var

Establecer var do seguinte rexistro de entrada; establecer NR , FNR .

getline var < ficheiro

Establece var dende o seguinte rexistro do ficheiro .

comando | getline [ var ]

Execute o comando piping a saída en $ 0 ou var , como arriba.

comando | & getline [ var ]

Executar o comando como co-proceso de canalización a saída en $ 0 ou var , como anteriormente. Os coprocesos son unha extensión de gawk .

seguinte

Deixar de procesar o rexistro de entrada actual. O seguinte rexistro de entrada é lido e o procesamento comeza de novo co primeiro patrón do programa AWK. Se se chega o fin dos datos de entrada, executáronse os bloqueos END , se hai.

seguinte ficheiro

Deixar de procesar o ficheiro de entrada actual. O seguinte rexistro de entrada ve a partir do seguinte ficheiro de entrada. FILENAME e ARGIND son actualizados, FNR restablece a 1 e o procesamento comeza de novo co primeiro patrón do programa AWK. Se se chega o fin dos datos de entrada, executáronse os bloqueos END , se hai.

imprimir

Imprime o rexistro actual. O rexistro de saída finaliza co valor da variable ORS .

imprimir lista expr

Imprime expresións. Cada expresión está separada polo valor da variable OFS . O rexistro de saída finaliza co valor da variable ORS .

imprimir expr-list > ficheiro

Imprime expresións no ficheiro . Cada expresión está separada polo valor da variable OFS . O rexistro de saída finaliza co valor da variable ORS .

printf fmt, expr-list

Formatear e imprimir.

printf fmt, expr-list > ficheiro

Formatear e imprimir no ficheiro .

sistema ( cmd liña )

Executa o comando cmd-line e devolve o estado de saída. (Isto pode non estar dispoñible en sistemas non POSIX).

fflush ( [ ficheiro ] )

Separa os búferes asociados co ficheiro de saída aberto ou o ficheiro de canalización. Se falta o ficheiro , a saída estándar é redondeada. Se o ficheiro é a cadea nula, entón todos os ficheiros de saída abertos e as tubaxes teñen os seus buffers enraizados.

Se permiten redireccións de saída adicionais para impresión e printf .

imprimir ... >> ficheiro

engade saída ao ficheiro .

imprimir ... | comando

escribe nun tubo.

imprimir ... | e comando

envía datos a un co-proceso.

O comando getline devolve 0 no final do ficheiro e -1 nun erro. Tras un erro, ERRNO contén unha cadea que describe o problema.

NOTA: Se usa un tubo ou co-proceso para obter a liña , ou a partir da impresión ou printf dentro dun ciclo, debe usar preto () para crear novas instancias do comando. AWK non pecha automaticamente as canalizacións nin os coprocesos cando regresan a EOF.

A declaración printf

As versións AWK da función printf e sprintf () de Printf (ver a continuación) aceptan os seguintes formatos de especificación de conversión:

% c

Un carácter ASCII. Se o argumento usado para % c é numérico, trátase como un carácter e impreso. Se non, o argumento suponse que é unha cadea e só se imprime o primeiro primeiro carácter desta cadea.

% d , % i

Un número decimal (a parte enteira).

% e,% E

Un número de coma flotante do formulario [-] d.dddddde [+ -] dd . O formato % E usa E en lugar de e .

% f

Un número de coma flotante do formulario [-] ddd.dddddd .

% g,% G

Use a conversión % e ou % f , o que sexa máis curto, con ceros non significativos suprimidos. O formato % G usa % E en lugar de % e .

% o

Un número octal sen signo (tamén un número enteiro).

% u Un número decimal non asinado (de novo, un número enteiro).

% s

Unha cadea de caracteres.

% x,% X

Un número hexadecimal non asinado (un número enteiro). O formato % X usa ABCDEF en lugar de abcdef .

%%

Un único % character; non se converte ningún argumento.

Opcional, os parámetros adicionais poden estar entre o % ea letra de control:

contar $

Use o argumento de contador 'a este punto do formato. Este chámase un especificador de posición e está destinado principalmente para o seu uso en versións traducidas de cadeas de formato, non no texto orixinal dun programa AWK. É unha extensión de gawk .

-

A expresión debe quedar xustificada no seu campo.

espazo

Para conversións numéricas, prefixar valores positivos cun espazo e valores negativos cun signo menos.

+

O signo máis utilizado antes do modificador de ancho (ver a continuación) di que sempre fornece un sinal para conversións numéricas, mesmo se os datos a formatar son positivos. O + anula o modificador do espazo.

#

Use un "formulario alternativo" para certas letras de control. Para % o , forneza un cero principal. Para % x e % X , fornece un resultado 0x ou 0X por un resultado non cero. Para % e , % E e % f , o resultado sempre contén un punto decimal. Por % g e % G , os ceros finais non se eliminan do resultado.

0

Un líder 0 (cero) actúa como unha bandeira, que indica que a saída debería estar acolchada con ceros en lugar de espazos. Isto aplícase incluso a formatos de saída non numéricos. Esta bandeira só ten un efecto cando o ancho do campo é máis ancho que o valor a imprimir.

ancho

O campo debe estar acolchado a este ancho. O campo normalmente está cheo de espazos. Se se usou a bandeira 0 , está cuberta con ceros.

. prec

Un número que especifica a precisión que se debe empregar ao imprimir. Para os formatos % e , % E e % f , isto especifica o número de díxitos que quere imprimir á dereita do punto decimal. Para os formatos % g e % G , especifica o número máximo de díxitos significativos. Para os formatos % d , % o , % i , % u , % x e % X , especifica o número mínimo de díxitos para imprimir. Para % s , especifica o número máximo de caracteres da cadea que se debe imprimir.

O ancho dinámico e as capacidades pre precursoras das rutinas ANSI C printf () son compatibles. A * en lugar das especificacións de ancho ou prec, provoca que os seus valores sexan eliminados da lista de argumentos para printf ou sprintf () . Para usar un especificador posicional cun ancho ou precisión dinámico, forneza o contador $ despois do * na cadea de formato. Por exemplo, "% 3 $ * 2 $. * 1 $ s" .

Nomes de ficheiros especiais

Ao facer a redirección de E / S dende impresión ou printf nun arquivo, ou a través de getline dun ficheiro, gawk recoñece internacionais certos nomes de ficheiros especiais. Estes nomes de ficheiro permiten o acceso aos descritores de ficheiros abertos herdados do proceso primario de Gawk (normalmente o shell). Estes nomes de ficheiro tamén poden usarse na liña de comandos para nomear os ficheiros de datos. Os nomes dos ficheiros son:

/ dev / stdin

A entrada estándar.

/ dev / stdout

A saída estándar.

/ dev / stderr

A saída estándar de erro.

/ dev / fd / n

O ficheiro asociado co descriptor de ficheiro aberto n .

Estes son particularmente útiles para as mensaxes de erro. Por exemplo:

imprimir "¡Golpeou!" > "/ dev / stderr"

mentres que de outra forma terías que usar

imprimir "¡Golpeou!" | "cat 1> & 2"

Os seguintes nomes de ficheiros especiais poden usarse co operador de & co-process para crear conexións de rede TCP / IP.

/ inet / tcp / lport / rhost / rport

Ficheiro para a conexión TCP / IP no porto de porto local ao rhost host remoto no porto de porto remoto. Use un porto de 0 para que o sistema elixa un porto.

/ inet / udp / lport / rhost / rport

Similar, pero usa UDP / IP no canto de TCP / IP.

/ inet / raw / lport / rhost / rport

Reservado para uso futuro.

Outros nomes de ficheiros especiais proporcionan acceso á información sobre o proceso de gawk en execución. Estes nomes de ficheiro agora están obsoletos. Use a matriz PROCINFO para obter a información que proporcionan. Os nomes dos ficheiros son:

/ dev / pid

Ao ler este ficheiro, devolve a ID do proceso do proceso actual, en decimal, finalizada cunha liña nova.

/ dev / ppid

Ao ler este ficheiro, devolve o ID do proceso principal do proceso actual, en decimal, terminado cunha nova liña.

/ dev / pgrpid

Ao ler este ficheiro devolve a ID do grupo de proceso do proceso actual, en decimal, finalizada cunha nova liña.

/ dev / usuario

Lendo este ficheiro devolve un único rexistro terminado cunha nova liña. Os campos están separados con espazos. $ 1 é o valor da chamada do sistema getuid (2), $ 2 é o valor da chamada do sistema geteuid (2), $ 3 é o valor da chamada do sistema getgid (2) e $ 4 é o valor do getegid (2) chamada do sistema. Se hai campos adicionais, son as ID de grupo que obtivo getgroups (2). Non se admiten varios grupos en todos os sistemas.

Funcións numéricas

AWK ten as seguintes funcións aritméticas incorporadas:

atan2 ( y , x )

Devolve o arctangent de y / x en radianes.

cos ( expr )

Devolve o coseno de expr , que está en radianes.

exp ( expr )

A función exponencial.

int ( expr )

Trunca ao enteiro.

rexistro ( expr )

A función de logaritmo natural.

rand ()

Devolve un número aleatorio entre 0 e 1.

pecado ( expr )

Devolve o seno do expr , que está en radiáns.

sqrt ( expr )

A función raíz cadrada.

srand ( [ expr ] )

Usa expr como unha nova semente para o xerador de números aleatorios. Se non se fornece expr, úsase a hora do día. O valor de retorno é a semente anterior para o xerador de números aleatorios.

Funcións de cadea

Gawk ten as seguintes funcións de corda integradas:

asort ( s [ , d ] )

Devolve o número de elementos da matriz de orixe s . Os contidos de s están ordenados usando as regras normais de gawk para comparar valores e os índices dos valores ordenados de s son substituídos por números enteiros secuenciales que comezan por 1. Se se especifica a matriz de destino opcional d , entón s se duplicará por primeira vez en d , e entón d está ordenado, deixando os índices da matriz de orixe s inalterados.

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

Busca a cadea de destino t para os xogos da expresión regular r . Se h é unha cadea que comeza con g ou G , entón substitúe todas as coincidencias de r con s . Se non, h é un número que indica a coincidencia de r para substituír. Se non se fornece, úsase $ 0 . Dentro do texto de substitución s , a secuencia \ n , onde n é un díxito do 1 ao 9, pode usarse para indicar só o texto que coincide coa subexpresión entre parénteses n . A secuencia \ 0 representa todo o texto coincidente, así como o carácter & . A diferenza de sub () e gsub () , a cadea modificada retorna como resultado da función e a cadea orixinal non cambia.

gsub ( r , s [ , t ] )

Para cada subcadea que coincida coa expresión regular r na cadea t , substitúe a cadea s e devolva o número de substitucións. Se non se fornece, use $ 0 . Un & no texto de substitución substitúese polo texto que realmente coincidiu. Use \ & para obter un & literal. (Isto debe escribirse como "\\" ; vexa GAWK: Programación AWK efectiva para unha discusión máis completa das regras para & 's e versións invertidas no texto de substitución de sub () , gsub () e gensub () .)

índice ( s , t )

Devolve o índice da cadea t na cadea s , ou 0 se non está presente. (Isto implica que os índices de caracteres comezan nun.)

lonxitude ( [ s ] )

Devolve a lonxitude da cadea s ou a lonxitude de $ 0 se s non se fornece.

xogo ( s , r [ , a ] )

Devolve a posición en s onde se dá a expresión regular r , ou 0 se r non está presente e establece os valores de RSTART e RLENGTH . Teña en conta que a orde do argumento é a mesma que para o ~ operador: str ~ re . Se se proporciona unha matriz a , un é borrado e os elementos 1 a n están cubertos coas porcións de s que coinciden coa subexpresión paréntesis correspondente en r . O elemento 0'th dun contén a porción de s coincidente por toda a expresión regular r .

dividir ( s , a [ , r ] )

Divide a cadea s na matriz a na expresión regular r , e devolve o número de campos. Se r omítese, FS emprégase no seu lugar. A matriz a é borrada primeiro. A división compórtase de forma idéntica á división de campo, descrita anteriormente.

sprintf ( fmt , expr-list )

Imprime expr-list segundo fmt , e devolve a cadea resultante.

strtonum ( str )

Examina str e devolve o seu valor numérico. Se str comeza cun 0 principal, strtonum () supón que str é un número octal. Se str comeza cun punteiro 0x ou 0X , strtonum () asume que str é un número hexadecimal.

sub ( r , s [ , t ] )

Do mesmo xeito que gsub () , pero só se substitúe a primeira subcadena coincidente.

substr ( s , i [ , n ] )

Devolve a maioría das subcadenas de caracteres n de s a partir de i . Se omítese n, úsase o resto de s .

tolower ( str )

Devolve unha copia da cadea str , con todos os caracteres de maiúsculas en str traducidos ás súas correspondentes contrapartidas de minúsculas. Os caracteres non alfabéticos non se modifican.

toupper ( str )

Devolve unha copia da cadea str , con todos os caracteres en minúsculas en str traducidos ás súas correspondentes contrapartidas de maiúsculas. Os caracteres non alfabéticos non se modifican.

Funcións de tempo

Xa que un dos principais usos dos programas AWK é procesar ficheiros de rexistro que conteñen información de selado de tempo, Gawk ofrece as seguintes funcións para obter estampas de tempo e formatealas.

mktime ( dataspec )

Rurn dataspec nun selo de tempo da mesma forma que volveu systime () . O dataspec é unha cadea da forma AAAA MM DD HH MM SS [DST] . Os contidos da cadea son seis ou sete números que representan, respectivamente, todo o ano incluíndo o século, o mes do 1 ao 12, o día do mes do 1 ao 31, a hora do día de 0 a 23, o minuto de 0 a 59, eo segundo de 0 a 60, e unha marca opcional de gardar a luz do día. Os valores destes números non deben estar dentro dos intervalos especificados; por exemplo, unha hora de -1 significa 1 hora antes da medianoite. O orixe cero calendario gregoriano é asumido, co ano 0 o ano precedente 1 eo ano -1 o ano anterior 0. O tempo asúmese que está na zona horaria local. Se a bandeira de aforro de día é positiva, o tempo suponse que é hora de gardar o horario de verán; Se é certo, o tempo asúmese como hora estándar; e se é negativo (por defecto), mktime () intenta determinar se o horario de verán está en vigor durante o tempo especificado. Se dataspec non contén elementos suficientes ou a hora resultante está fóra de alcance, mktime () devolve -1.

strftime ( [ formato [ , marca de tempo ]] )

Forma a marca de tempo de acordo coa especificación en formato. A marca de tempo debe ser da mesma forma que a devolución de systime () . Se falta a marca de tempo, úsase a hora actual. Se falta o formato, emprégase un formato predeterminado equivalente ao resultado da data (1). Consulte a especificación da función strftime () en ANSI C para as conversións de formato que se garantan estar dispoñibles. Unha versión de dominio público de strftime (3) e unha páxina de home para ela veñen con gawk ; se esa versión foi usada para construír Gawk , todas as conversións descritas na páxina de man están dispoñibles para Gawk.

systime ()

Devolve a hora actual do día como o número de segundos desde a época (1970-01-01 00:00:00 UTC nos sistemas POSIX).

Funcións de manipulación de bit

Comezando coa versión 3.1 de gawk , están dispoñibles as seguintes funcións de manipulación de bit. Funcionan a través da conversión de valores de punto flotante de precisión dobre a enteiros longos sen firmar , realizando a operación e converter o resultado de novo en punto flotante. As funcións son:

e ( v1 , v2 )

Devolve o AND bit a bit dos valores fornecidos por v1 e v2 .

compl ( val )

Devolve o complemento bitwise do val .

lshift ( val , count )

Devolver o valor de val , desprazado á esquerda por bits de conta .

ou ( v1 , v2 )

Devolve os OR bit a bit dos valores proporcionados por v1 e v2 .

rshift ( val , count )

Devolva o valor de val , desprazado á dereita por bits de conta .

xor ( v1 , v2 )

Devolve o XOR bit a bit dos valores fornecidos por v1 e v2 .

Funcións de internacionalización

Comezando coa versión 3.1 de gawk , as seguintes funcións poden usarse desde o seu programa AWK para traducir cadeas en tempo de execución. Para obter máis detalles, consulte GAWK: Programación AWK efectiva .

bindtextdomain ( directorio [ , dominio ] )

Especifica o directorio onde gawk busca os ficheiros .mo , no caso de que non se poidan situar ou non nos locais `` estándar '' (por exemplo, durante a proba). Devolve o directorio onde o dominio está `` ligado ''.

O dominio predeterminado é o valor de TEXTDOMAIN . Se o directorio é a cadea nula ( "" ), entón bindtextdomain () devolve o enlace actual para o dominio dado.

dcgettext ( cadea [ , dominio [ , categoría ]]

Devolve a tradución da cadea no dominio de dominio de texto para a categoría de categoría local . O valor predeterminado para o dominio é o valor actual de TEXTDOMAIN . O valor predeterminado para a categoría é "LC_MESSAGES" .

Se fornece un valor para a categoría , debe ser unha cadea igual a unha das categorías locais coñecidas descritas en GAWK: A programación AWK efectiva . Tamén debe fornecer un dominio de texto. Usa TEXTDOMAIN se queres usar o dominio actual.

dcngettext (string1, string2 , number [ , dominio [ , categoría ]] )

Devolve a forma plural usada para o número da tradución de string1 e string2 no dominio do dominio de texto para a categoría de categoría local . O valor predeterminado para o dominio é o valor actual de TEXTDOMAIN . O valor predeterminado para a categoría é "LC_MESSAGES" .

Se fornece un valor para a categoría , debe ser unha cadea igual a unha das categorías locais coñecidas descritas en GAWK: A programación AWK efectiva . Tamén debe fornecer un dominio de texto. Usa TEXTDOMAIN se queres usar o dominio actual.

FUNCIÓNS DEFINIDAS DO USUARIO

As funcións no AWK están definidas do seguinte xeito:

nome da función ( lista de parámetros ) { declaracións }

As funcións executáronse cando son chamadas desde dentro de expresións en patróns ou accións. Os parámetros reais proporcionados na chamada de función úsanse para crear instancia nos parámetros formais declarados na función. As matrices pasan por referencia, outras variables pasan por valor.

Dado que as funcións non formaban parte da linguaxe AWK, a disposición para as variables locais é bastante torpe: son declaradas como parámetros extra na lista de parámetros. A convención é separar variables locais de parámetros reais por espazos extras na lista de parámetros. Por exemplo:

A función f (p, q, a, b) # a e b son locais {...} / abc / {...; f (1, 2); ...}

O parénteses esquerdo nunha chamada de función é necesaria para seguir inmediatamente o nome da función, sen ningún espazo branco que interveña. Isto é para evitar unha ambigüidade sintáctica co operador de concatenación. Esta restrición non se aplica ás funcións incorporadas enumeradas anteriormente.

As funcións poden chamarse e poden ser recursivas. Os parámetros de función utilizados como variables locais son inicializados para a cadea nula eo número cero despois da invocación de función.

Use expr de retorno para devolver un valor dunha función. O valor de retorno non está definido se non se fornece ningún valor, ou se a función retorna por `` caendo '' o final.

Se se proporcionou --lint , Gawk advirte sobre chamadas a funcións non definidas durante o tempo de procesamento, en vez de en tempo de execución. Chamando unha función non definida en tempo de execución é un erro fatal.

A palabra func pode usarse no lugar da función .

CARGA DINÁMICA DE NOVAS FUNCIÓNS

Comezando coa versión 3.1 de gawk , podes engadir dinámicamente novas funcións incorporadas ao intérprete gawk en execución. Os detalles completos están fóra do alcance desta páxina de manual; Vexa GAWK: A programación AWK eficaz para os detalles.

extensión ( obxecto , función )

Vincule dinámicamente o ficheiro de obxecto compartido chamado por obxecto e invoque a función dese obxecto para realizar a inicialización. Estes deben ser proporcionados como cadeas. Devolve o valor devolto pola función .

Esta función é proporcionada e documentada en GAWK: A programación AWK efectiva , pero todo sobre esta característica é probable que cambie no próximo lanzamento. Recomendamos encarecidamente que non use esta característica para calquera cousa que non estea disposto a rehacer.

SINALAS

pgawk acepta dous sinais. SIGUSR1 fai que se despexa un perfil e unha pila de chamadas de funcións no ficheiro de perfil, que é awkprof.out ou o ficheiro foi nomeado coa opción --profile . A continuación, segue a funcionar. SIGHUP fai que se despexa o perfil e funcións da pila de chamadas e saia.

EXEMPLOS

Imprime e ordena os nomes de inicio de sesión de todos os usuarios: BEGIN {FS = ":"} {print $ 1 | "sort"} Contar liñas nun ficheiro: {nlines ++} END {print nlines} Precede cada liña co seu número no ficheiro: {print FNR, $ 0} concatenar e número de liña (unha variación sobre un tema): {print NR, $ 0}

Internalización

As constantes de cadea son secuencias de caracteres entre comiñas dobres. En contornos non hablantes de inglés, é posible marcar as cadeas no programa AWK que requiren tradución ao idioma natural nativo. Tales cadeas están marcadas no programa AWK cun subliñado destacado (`` _ ''). Por exemplo,

gawk 'BEGIN {print "hello, world"}'

sempre impresións hola mundo . Pero,

gawk 'BEGIN {print _ "hello, world"}'

podería imprimir bonjour, monde en Francia.

Hai varios pasos implicados na produción e xestión dun programa AWK localizable.

1.

Engada unha acción BEGIN para asignar un valor á variable TEXTDOMAIN para establecer o dominio de texto nun nome asociado ao seu programa.


INICIO {TEXTDOMAIN = "myprog"}

Isto permite que Gawk busque o ficheiro .mo asociado co seu programa. Sen este paso, Gawk usa o dominio de mensaxes de texto, que probablemente non conteña traducións para o seu programa.

2.

Marque todas as cadeas que se deben traducir cos guións baixos principais.

3.

Se é preciso, use as funcións dcgettext () e / ou bindtextdomain () no seu programa, segundo corresponda.

4.

Execute gawk --gen-po -f myprog.awk> myprog.po para xerar un ficheiro .po para o seu programa.

5.

Proporcione traducións axeitadas e compile e instale un ficheiro .mo correspondente.

As características de internacionalización descríbense con total detalle en GAWK: A programación AWK efectiva .

Compatibilidade con Posix

Un obxectivo principal para gawk é a compatibilidade co estándar POSIX, así como coa última versión de UNIX awk . Con este fin, Gawk incorpora as seguintes características visibles para o usuario que non se describen no libro AWK, pero forman parte da versión de awk de Bell Laboratories e están no estándar POSIX.

O libro indica que a asignación de variables de liña de comando ocorre cando awk abriría outro argumento como ficheiro, despois de executar o bloque BEGIN . Non obstante, nas implementacións anteriores, cando tal asignación apareceu antes de calquera nome de ficheiro, a asignación pasaría antes de executar o bloque BEGIN . As aplicacións chegaron a depender desta característica ``. '' Cando awk cambiou para coincidir coa súa documentación, a opción -v para asignar variables antes da execución do programa engadiuse para acomodar aplicacións que dependían do comportamento anterior. (Esta característica foi acordada por ambos os Laboratorios Bell e os desenvolvedores de GNU).

A opción -W para características específicas de implementación é a partir do estándar POSIX.

Ao procesar os argumentos, Gawk usa a opción especial `` - '' para sinalar o final dos argumentos. No modo de compatibilidade, advirte sobre pero ignora as opcións non definidas. En funcionamento normal, tales argumentos pasan ao programa AWK para que o poida procesar.

O libro AWK non define o valor de retorno de srand () . O estándar POSIX devolve a semente que estaba a usar, para permitir o seguimento das secuencias de números aleatorios. Polo tanto, srand () en gawk tamén retorna a súa semente actual.

Outras novas características son: O uso de múltiples opcións -f (de MKS awk ); a matriz ENVIRON ; as secuencias \ a e \ v escape (feitas originalmente en gawk e alimentadas de novo na versión de Bell Laboratories); as funcións incorporadas () e toupper () (desde a versión de Bell Laboratories); e as especificacións de conversión ANSI C en printf (feito primeiro na versión de Bell Laboratories).

Características históricas

Hai dúas características das implementacións históricas de AWK que admiten Gawk . En primeiro lugar, é posible chamar a función longa () incorporada non só sen argumentos, senón mesmo sen parénteses. Así,

a = longa # Holy Algol 60, Batman!

é o mesmo que calquera dos

a = lonxitude ()
a = lonxitude ($ 0)

Esta característica está marcada como `` obsoleto '' no estándar POSIX e Gawk emite unha advertencia sobre o seu uso se se especifica --lint na liña de comandos.

A outra característica é o uso das declaracións de continuidade ou de ruptura fóra do corpo dun tempo , para facer ou facer ciclos. As implementacións tradicionais de AWK trataron este uso como equivalente á próxima declaración. Gawk admite este uso se se especificou -tradicional .

Extensións de GNU

Gawk ten varias extensións para POSIX awk . Descríbense nesta sección. Todas as extensións descritas aquí pódense deshabilitar invocando gawk coa opción tradicional .

As seguintes características de gawk non están dispoñibles en POSIX awk .

*

Non se realiza unha busca de camiño para os ficheiros chamados mediante a opción -f . Polo tanto, a variable de ambiente AWKPATH non é especial.

*

A secuencia de escape \ x . (Desactivado con --posix ).

*

A función fflush () . (Desactivado con --posix ).

*

A posibilidade de seguir as liñas despois ? e :. (Desactivado con --posix ).

*

Constantes octal e hexadecimal nos programas AWK.

*

As variables ARGIND , BINMODE , ERRNO , LINT , RT e TEXTDOMAIN non son especiais.

*

A variable IGNORECASE e os seus efectos secundarios non están dispoñibles.

*

A división de campo FIELDWIDTHS e ancho fixo analiza .

*

A matriz PROCINFO non está dispoñible.

*

O uso de RS como expresión regular.

*

Non se recoñecen os nomes de ficheiros especiais dispoñibles para a redirección de E / S.

*

O operador | & para crear coprocesos.

*

A capacidade de dividir caracteres individuais usando a cadea nula como o valor de FS , e como o terceiro argumento para dividir () .

*

O segundo argumento opcional á función close () .

*

O terceiro argumento opcional para a función match () .

*

A capacidade de usar os especificadores de posición con printf e sprintf () .

*

O uso da matriz de eliminación para eliminar todo o contido dunha matriz.

*

O uso de nextfile para abandonar o procesamento do ficheiro de entrada actual.

*

O e () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () ou () , rshift () , strftime () , strtonum () () e xor () .

*

Cadeas localizables.

*

Engadindo novas funcións incorporadas dinámicamente coa función extension () .

O libro AWK non define o valor de retorno da función close () . Gawk 's close () devolve o valor de fclose (3), ou pclose (3), ao pechar un ficheiro de saída ou canalización, respectivamente. Devolve o estado de saída do proceso ao pechar un tubo de entrada. O valor de retorno é -1 se o ficheiro, a canalización ou o coproceso chamado non se abriu cunha redirección.

Cando gawk é invocado coa opción tradicional , se o argumento fs para a opción -F é `` t '', entón FS está definido no carácter de tabulación. Teña en conta que escribindo gawk -F \ t ... simplemente fai que o shell cite o `` t '', e non pase `` \ t '' á opción -F . Xa que este é un caso especial bastante feo, non é o comportamento predeterminado. Este comportamento tamén non se ocorre se --posix foi especificado. Para obter realmente un carácter de tabulación como separador de campo, o mellor é usar comiñas simples: gawk -F '\ t' ....

Vexa outros comandos : espera , lp , complete , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , free , lpr , execl , fdisk , en , quen , iwconfig , ifconfig , vgdisplay , open , lsmod , ntohs , mailq , kill , wtmp