awk gawk - linguagem de digitalização e processamento de padrões
gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .
Gawk é a implementação do Projeto GNU da linguagem de programação AWK. Está em conformidade com a definição da linguagem no padrão POSIX 1003.1. Esta versão, por sua vez, é baseada na descrição em The AWK Programming Language, de Aho, Kernighan e Weinberger. Gawk fornece os recursos adicionais encontrados na versão atual do awk de Brian Kernighan e várias extensões específicas do GNU.
A linha de comando consiste em opções para o próprio gawk, o texto do programa AWK (se não for fornecido pelas opções -f ou - -include), e valores a serem disponibilizados nas variáveis AWK pré-definidas ARGC e ARGV.
Esta página de manual é intencionalmente o mais concisa possível. Detalhes completos são fornecidos em GAWK: Programação efetiva de AWK, e você deve procurar lá a história completa sobre qualquer recurso específico. Sempre que possível, são fornecidos links para a versão online do manual.
As opções Gawk podem ser opções tradicionais de uma letra no estilo POSIX ou opções longas no estilo GNU. As opções POSIX começam com um único “-”, enquanto as opções longas começam com “- -”. Opções longas são fornecidas para recursos específicos do GNU e para recursos exigidos pelo POSIX.
As opções específicas do Gawk são normalmente usadas na forma de opções longas. Argumentos para opções longas são unidos com a opção por um sinal =, sem espaços intermediários, ou podem ser fornecidos no próximo argumento da linha de comando. As opções longas podem ser abreviadas, desde que a abreviação seja única.
Além disso, cada opção longa tem uma opção curta correspondente, para que a funcionalidade da opção possa ser usada a partir de scripts executáveis #!.
Gawk aceita as seguintes opções. As opções padrão são listadas primeiro, seguidas pelas opções para extensões gawk, listadas em ordem alfabética por opção curta.
- -file program-file Lê o código-fonte do programa AWK a partir do arquivo program-file, em vez do primeiro argumento da linha de comando. Múltiplas opções -f podem ser usadas. Arquivos lidos com -f são tratados como se começassem com uma instrução @namespace "awk" implícita.
- -field-separator fs Use fs para o separador de campo de entrada (o valor da variável predefinida FS) .
Atribua o valor val à variável var, antes de iniciar a execução do programa. Tais valores variáveis estão disponíveis para a regra BEGIN de um programa AWK.
- -characters-as-bytes Trate todos os dados de entrada como caracteres de byte único. A opção - -posix substitui esta.
- -traditional Executar no modo de compatibilidade. No modo de compatibilidade, gawk se comporta de forma idêntica ao awk de Brian Kernighan; nenhuma das extensões específicas do GNU é reconhecida.
- -copyright Imprima a versão curta da mensagem de informação de copyright GNU na saída padrão e saia com sucesso.
Imprima uma lista ordenada de variáveis globais, seus tipos e valores finais para arquivo. O arquivo padrão é awkvars.out no diretório atual.
Habilita a depuração de programas AWK. Por padrão, o depurador lê os comandos interativamente do teclado (entrada padrão). O argumento opcional arquivo especifica um arquivo com uma lista de comandos para o depurador executar de forma não interativa.
Nesse modo de execução, o gawk carrega o código-fonte AWK e solicita os comandos de depuração. Gawk só pode depurar fonte de programa AWK fornecida com as opções -f e - -include. O depurador está documentado em GAWK: Programação efetiva de AWK; consulte https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.
- -source program-text Use program-text como código-fonte do programa AWK. Cada argumento fornecido por -e é tratado como se começasse com uma instrução @namespace "awk" implícita.
Semelhante a -f, porém, esta opção é a última processada. Isso deve ser usado com scripts #!, especialmente para aplicativos CGI, para evitar passar opções ou código-fonte (!) na linha de comando de um URL. Esta opção desativa as atribuições de variáveis de linha de comando.
- -gen-pot Examine e analise o programa AWK e gere um arquivo de formato GNU .pot (Modelo de objeto portátil) na saída padrão com entradas para todas as strings localizáveis no programa. O programa em si não é executado.
- -help Imprime um resumo relativamente curto das opções disponíveis na saída padrão. De acordo com os Padrões de codificação GNU, essas opções causam uma saída imediata e bem-sucedida.
Carregue uma biblioteca de origem awk. Isso procura a biblioteca usando a variável de ambiente AWKPATH. Se a pesquisa inicial falhar, outra tentativa será feita após anexar o sufixo .awk. O arquivo será carregado apenas uma vez (ou seja, as duplicatas são eliminadas) e o código não constitui a fonte principal do programa. Arquivos lidos com - -include são tratados como se começassem com uma declaração @namespace "awk" implícita.
- -trace Imprime os nomes de código de byte interno conforme eles são executados ao executar o programa. O traço é impresso com erro padrão. Cada ``op code'' é precedido por um sinal + na saída.
- -load lib Carrega uma extensão gawk da biblioteca compartilhada lib. Isso procura a biblioteca usando a variável de ambiente AWKLIBPATH. Se a pesquisa inicial falhar, outra tentativa será feita após anexar o sufixo da biblioteca compartilhada padrão para a plataforma. Espera-se que a rotina de inicialização da biblioteca seja denominada dl_load().
Forneça avisos sobre construções duvidosas ou não portáveis para outras implementações do AWK. Consulte https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options para obter a lista de valores possíveis para valor.
- -bignum Força aritmética de precisão arbitrária em números. Esta opção não tem efeito se gawk não for compilado para usar as bibliotecas GNU MPFR e GMP. (Nesse caso, gawk emite um aviso.)
NOTA: Este recurso está em liberdade condicional. O principal mantenedor do gawk não está mais dando suporte a ele, embora haja um membro da equipe de desenvolvimento que está. Se essa situação mudar, o recurso será removido do gawk.
Defina GAWK_NO_MPFR_WARN no ambiente para silenciar o aviso.
- -non-decimal-data Reconhece valores octais e hexadecimais nos dados de entrada. Use esta opção com muito cuidado!
- -use-lc-numeric Força gawk a usar o caractere de ponto decimal da localidade ao analisar os dados de entrada.
- -nostalgia Fornece um momento de nostalgia para usuários awk de longa data.
Envie uma versão bem impressa do programa para arquivo. O arquivo padrão é awkprof.out no diretório atual. Esta opção implica - -no-optimize.
- -optimize Ativa as otimizações padrão do gawk na representação interna do programa. Essa opção está ativada por padrão.
Inicie uma sessão de criação de perfil e envie os dados de criação de perfil para prof-file. O padrão é awkprof.out no diretório atual. O perfil contém contagens de execução de cada instrução no programa na margem esquerda e contagens de chamada de função para cada função definida pelo usuário. Gawk é executado mais lentamente neste modo. Esta opção implica - -no-optimize.
- -posix Isso ativa o modo de compatibilidade e desativa várias extensões comuns.
- -re-interval Habilita o uso de expressões de intervalo na correspondência de expressões regulares. As expressões de intervalo são habilitadas por padrão, mas essa opção permanece para compatibilidade com versões anteriores.
- -no-optimize Desativa as otimizações padrão do gawk na representação interna do programa.
- -sandbox Execute gawk no modo sandbox, desativando a função system(), redirecionamento de entrada com getline, saída redirecionamento com print e printf e carregamento de extensões dinâmicas. A execução de comandos (através de pipelines) também está desativada.
- -lint-old Fornece avisos sobre construções que não são portáteis para a versão original do UNIX awk.
- -version Imprime as informações da versão para esta cópia específica do gawk na saída padrão. Isso é útil ao relatar bugs. De acordo com os Padrões de codificação GNU, essas opções causam uma saída imediata e bem-sucedida.
Sinalize o fim das opções. Isso é útil para permitir que outros argumentos para o próprio programa AWK comecem com um “-”.
No modo de compatibilidade, quaisquer outras opções são marcadas como inválidas, mas são ignoradas. Em operação normal, desde que o texto do programa tenha sido fornecido, as opções desconhecidas são passadas para o programa AWK na matriz ARGV para processamento.
Para compatibilidade POSIX, a opção -W pode ser usada, seguida do nome de uma opção longa.
Um programa AWK consiste em uma sequência de diretivas opcionais, instruções de ação padrão e definições de funções opcionais.
@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }Gawk primeiro lê a fonte do programa do arquivo de programa(s) se especificado, de argumentos para - -fonte, ou do primeiro não -option argumento na linha de comando. As opções -f e - -source podem ser usadas várias vezes na linha de comando. Gawk lê o texto do programa como se todos os arquivos de programase os textos fonte da linha de comando tivessem sido concatenados.
Além disso, as linhas que começam com @include podem ser usadas para incluir outros arquivos de origem em seu programa. Isso é equivalente a usar a opção - -include.
Linhas começando com @load podem ser usadas para carregar funções de extensão em seu programa. Isso é equivalente a usar a opção - -load.
A variável de ambiente AWKPATH especifica um caminho de pesquisa a ser usado ao localizar arquivos de origem nomeados com as opções -f e - -include. Se esta variável não existir, o caminho padrão é ".:/usr/local/share/awk". (O diretório real pode variar, dependendo de como o gawk foi construído e instalado.) Se um nome de arquivo fornecido à opção -f contiver um caractere “/ ”, nenhum caminho pesquisa é realizada.
A variável de ambiente AWKLIBPATH especifica um caminho de pesquisa a ser usado ao localizar arquivos de origem nomeados com a opção - -load. Se esta variável não existir, o caminho padrão é "/usr/local/lib/gawk". (O diretório real pode variar, dependendo de como o gawk foi criado e instalado.)
Gawk executa programas AWK na seguinte ordem. Primeiro, todas as atribuições de variáveis especificadas por meio da opção -v são executadas. Em seguida, gawk compila o programa em um formulário interno. Em seguida, gawk executa o código na(s) regra(s) BEGIN (se houver) e procede à leitura de cada arquivo nomeado no ARGV matriz (até ARGV[ARGC-1]). Se não houver arquivos nomeados na linha de comando, gawk lê a entrada padrão.
Se um nome de arquivo na linha de comando tiver o formato var=val, ele será tratado como uma atribuição de variável. A variável var receberá o valor val. (Isso acontece depois que qualquer regra BEGIN foi executada.)
Se o valor de um determinado elemento de ARGV estiver vazio (""), gawk pula sobre ele.
Para cada arquivo de entrada, se existir uma regra BEGINFILE, gawk executa o código associado antes de processar o conteúdo do arquivo. Da mesma forma, gawk executa o código associado às regras ENDFILE após processar o arquivo.
Para cada registro na entrada, gawk testa para ver se ele corresponde a qualquer padrão no programa AWK. Para cada padrão que o registro corresponde, gawk executa a ação associada. Os padrões são testados na ordem em que ocorrem no programa.
Por fim, depois que todas as entradas forem esgotadas, gawk executará o código na(s) regra(s) END (se houver).
De acordo com o POSIX, os arquivos nomeados na linha de comando awk devem ser arquivos de texto. O comportamento é ``indefinido'' se eles não forem. A maioria das versões do awk trata um diretório na linha de comando como um erro fatal.
Para gawk, um diretório na linha de comando produz um aviso, mas é ignorado. Se qualquer uma das opções - -posix ou - -traditional for fornecida, gawk volta a tratar os diretórios na linha de comando como um erro fatal .
As variáveis AWK são dinâmicas; eles passam a existir quando são usados pela primeira vez. Seus valores são números de ponto flutuante ou strings, ou ambos, dependendo de como são usados. Além disso, gawk permite que as variáveis tenham o tipo de expressão regular. AWK também possui arrays unidimensionais; arrays com múltiplas dimensões podem ser simulados. No entanto, gawk fornece verdadeiros arrays de arrays. Várias variáveis predefinidas são configuradas à medida que um programa é executado; estes são descritos conforme necessário e resumidos abaixo.
Normalmente, os registros são separados por caracteres de nova linha. Você pode controlar como os registros são separados atribuindo valores à variável integrada RS. Consulte https://www.gnu.org/software/gawk/manual/html_node/Records.html para obter detalhes.
À medida que cada registro de entrada é lido, gawk divide o registro em campos, usando o valor da variável FS como separador de campo. Além disso, FIELDWIDTHS e FPAT podem ser usados para controlar a divisão do campo de entrada. Veja os detalhes, começando em https://www.gnu.org/software/gawk/manual/html_node/Fields.html.
Cada campo no registro de entrada pode ser referenciado por sua posição: $1, $2 e assim por diante. $0 é o registro completo, incluindo espaços em branco iniciais e finais.
A variável NF é definida como o número total de campos no registro de entrada.
Referências a campos inexistentes (ou seja, campos após $NF) produzem a string nula. No entanto, atribuir a um campo inexistente (por exemplo, $ (NF+2)=5) aumenta o valor de NF, cria quaisquer campos intermediários com o valor nulo string como seus valores, e faz com que o valor de $0 seja recalculado, com os campos sendo separados pelo valor de OFS. Referências a campos numerados negativos causam um erro fatal. Decrementar NF faz com que os valores dos campos após o novo valor sejam perdidos, e o valor de $0 seja recalculado, com os campos sendo separados pelo valor de OFS.
Atribuir um valor a um campo existente faz com que todo o registro seja reconstruído quando $0 é referenciado. Da mesma forma, atribuir um valor a $0 faz com que o registro seja dividido novamente, criando novos valores para os campos.
As variáveis internas do Gawk estão listadas abaixo. Esta lista é propositalmente concisa. Para obter detalhes, consulte https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.
O número de argumentos de linha de comando.
O índice em ARGV do arquivo atual sendo processado.
Matriz de argumentos de linha de comando. A matriz é indexada de 0 a ARGC - 1.
Em sistemas não-POSIX, especifica o uso do modo “binário” para todas as E/S de arquivo. Consulte https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html para obter detalhes.
O formato de conversão para números, "%.6g", por padrão.
Uma matriz contendo os valores do ambiente atual. A matriz é indexada pelas variáveis de ambiente, cada elemento sendo o valor dessa variável.
Se ocorrer um erro de sistema ao fazer um redirecionamento para getline, durante uma leitura para getline ou durante um close(), então ERRNO é definido como uma string que descreve o erro. O valor está sujeito a tradução em localidades diferentes do inglês.
Uma lista separada por espaços em branco de larguras de campo. Quando definido, gawk analisa a entrada em campos de largura fixa, em vez de usar o valor da variável FS como separador de campo. Cada largura de campo pode, opcionalmente, ser precedida por um valor separado por dois pontos, especificando o número de caracteres a serem ignorados antes do início do campo.
O nome do arquivo de entrada atual. Se nenhum arquivo for especificado na linha de comando, o valor de FILENAME é “- ”. No entanto, FILENAME é indefinido dentro da regra BEGIN (a menos que definido por getline).
O número do registro de entrada no arquivo de entrada atual.
Uma expressão regular que descreve o conteúdo dos campos em um registro. Quando definido, gawk analisa a entrada em campos, onde os campos correspondem à expressão regular, em vez de usar o valor de FS como separador de campo.
O separador de campo de entrada, um espaço por padrão. Consulte https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html para obter detalhes.
Uma matriz cujos índices e valores correspondentes são os nomes de todas as funções definidas pelo usuário ou de extensão no programa. NOTA: Você não pode usar a instrução delete com a matriz FUNCTAB.
Controla a diferenciação de maiúsculas e minúsculas de todas as expressões regulares e operações de cadeia de caracteres. Consulte https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html para obter detalhes.
Fornece controle dinâmico da opção - -lint de um programa AWK.
O número de campos no registro de entrada atual.
O número total de registros de entrada vistos até agora.
O formato de saída para números, "%.6g", por padrão.
O separador de campo de saída, um espaço por padrão.
O separador de registro de saída, por padrão, uma nova linha.
A precisão de trabalho de números de ponto flutuante de precisão arbitrária, 53 por padrão.
Os elementos desse array fornecem acesso a informações sobre o programa AWK em execução. Consulte https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset para obter detalhes.
O modo de arredondamento a ser usado para aritmética de precisão arbitrária em números, por padrão "N" (modo IEEE-754 roundTiesToEven). Consulte https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode para obter detalhes.
O separador de registro de entrada, por padrão, uma nova linha.
O terminador de registro. Gawk define RT para o texto de entrada que corresponde ao caractere ou expressão regular especificado por RS.
O índice do primeiro caractere correspondido por match(); 0 se não houver correspondência.
O comprimento da string correspondida por match(); -1 se não houver correspondência.
A string usada para separar vários subscritos em elementos de matriz, por padrão "\034".
Uma matriz cujos índices são os nomes de todas as variáveis globais e matrizes atualmente definidas no programa. Você não pode usar a instrução delete com o array SYMTAB, nem atribuir a elementos com um índice que não seja um nome de variável.
O domínio de texto do programa AWK; usado para encontrar as traduções localizadas para as strings do programa.
As matrizes são subscritas com uma expressão entre colchetes ([ e ]). Se a expressão for uma lista de expressões (expr, expr . . .), então o subscrito da matriz é uma string que consiste na concatenação do valor (string) de cada expressão, separados pelo valor da variável SUBSEP. Esta facilidade é usada para simular matrizes multidimensionadas. Por exemplo:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
atribui a string "hello, world\n" ao elemento do array x que é indexado pela string "A\034B\034C" . Todos os arrays no AWK são associativos, ou seja, indexados por valores de string.
O operador especial in pode ser usado para testar se um array possui um índice que consiste em um determinado valor:
if (val in array) print array[val]
Se a matriz tiver vários subscritos, use (i, j) na matriz.
A construção in também pode ser usada em um loop for para iterar sobre todos os elementos de uma matriz. No entanto, a construção (i, j) no array só funciona em testes, não em loops for.
Um elemento pode ser excluído de uma matriz usando a instrução delete. A instrução delete também pode ser usada para excluir todo o conteúdo de um array, apenas especificando o nome do array sem um subscrito.
gawk suporta verdadeiros arrays multidimensionais. Não requer que tais arrays sejam ``retangulares'' como em C ou C++. Consulte https://www.gnu.org/software/gawk/manual/html_node/Arrays para obter detalhes.
O Gawk fornece um recurso simples de namespace para ajudar a contornar o fato de que todas as variáveis no AWK são globais.
Um nome qualificado consiste em dois identificadores simples unidos por dois pontos duplos (::). O identificador à esquerda representa o namespace e o identificador à direita é a variável dentro dele. Todos os nomes simples (não qualificados) são considerados no namespace ``atual''; o namespace padrão é awk. No entanto, identificadores simples que consistem apenas em letras maiúsculas são forçados no namespace awk, mesmo se o namespace atual for diferente.
Você altera o namespace atual com uma diretiva @namespace "name ".
Os nomes de funções internas predefinidos padrão não podem ser usados como nomes de namespace. Os nomes de funções adicionais fornecidas pelo gawk podem ser usados como nomes de namespace ou como identificadores simples em outros namespaces. Para obter mais detalhes, consulte https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.
Variáveis e campos podem ser números (ponto flutuante), strings ou ambos. Eles também podem ser expressões regulares. Como o valor de uma variável é interpretado depende de seu contexto. Se usado em uma expressão numérica, será tratado como um número; se usado como uma string, será tratado como uma string.
Para forçar uma variável a ser tratada como um número, adicione zero a ela; para forçá-lo a ser tratado como uma string, concatene-o com a string nula.
As variáveis não inicializadas têm o valor numérico zero e o valor de string "" (a string nula ou vazia).
Quando uma string deve ser convertida em um número, a conversão é realizada usando strtod(3). Um número é convertido em uma string usando o valor de CONVFMT como uma string de formato para sprintf(3), com o valor numérico da variável como argumento. No entanto, embora todos os números no AWK sejam de ponto flutuante, os valores inteiros são sempre convertidos como inteiros.
Gawk realiza comparações da seguinte forma: Se duas variáveis são numéricas, elas são comparadas numericamente. Se um valor for numérico e o outro tiver um valor de string que seja uma “string numérica”, as comparações também serão feitas numericamente. Caso contrário, o valor numérico é convertido em uma string e uma comparação de string é executada. Duas strings são comparadas, é claro, como strings.
Observe que as constantes de string, como "57", não são strings numéricas, são constantes de string. A ideia de “cadeia numérica ” só se aplica a campos, entrada getline, FILENAME, elementos ARGV, elementos ENVIRON e os elementos de uma matriz criada por split() ou patsplit() que são strings numéricas. A ideia básica é que a entrada do usuário, e somente a entrada do usuário, que parece numérica, deve ser tratada dessa forma.
Você pode usar constantes octais e hexadecimais no estilo C no código-fonte do programa AWK. Por exemplo, o valor octal 011 é igual ao decimal 9 e o valor hexadecimal 0x11 é igual ao decimal 17.
As constantes string no AWK são sequências de caracteres entre aspas duplas (como "valor"). Dentro de strings, certas sequências de escape são reconhecidas, como em C. Veja https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences para os detalhes.
Uma constante de expressão regular é uma sequência de caracteres entre barras (como /value/).
As sequências de escape descritas no manual também podem ser usadas dentro de expressões regulares constantes (por exemplo, /[ \t\f\n\r\v]/ corresponde a caracteres de espaço em branco).
Gawk fornece constantes de expressão regular tipadas fortemente. Estes são escritos com um símbolo inicial @ (da seguinte forma: @/value/). Essas constantes podem ser atribuídas a escalares (variáveis, elementos de matriz) e passadas para funções definidas pelo usuário. As variáveis assim atribuídas têm o tipo de expressão regular.
AWK é uma linguagem orientada a linha. O padrão vem primeiro e depois a ação. As declarações de ação estão entre { e }. Ou o padrão pode estar faltando, ou a ação pode estar faltando, mas, é claro, não ambos. Se o padrão estiver ausente, a ação será executada para cada registro de entrada. Uma ação ausente é equivalente a
{ print }que imprime o registro inteiro.
Os comentários começam com o caractere # e continuam até o final da linha. Linhas vazias podem ser usadas para separar declarações. Normalmente, uma declaração termina com uma nova linha, no entanto, este não é o caso de linhas que terminam em vírgula, {, ?, :, && ou ||. As linhas que terminam em do ou else também têm suas declarações continuadas automaticamente na linha seguinte. Em outros casos, uma linha pode ser continuada terminando-a com um “\”, caso em que a nova linha é ignorada. No entanto, um “\ ” após um # não é especial.
Várias instruções podem ser colocadas em uma linha, separando-as com um “; ”. Isso se aplica tanto às instruções dentro da parte de ação de um par padrão-ação (o caso usual) quanto às próprias instruções padrão-ação.
Os padrões AWK podem ser um dos seguintes:
BEGIN END BEGINFILE ENDFILE /regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
BEGIN e END são dois tipos especiais de padrões que não são testados contra a entrada. As partes de ação de todos os padrões BEGIN são mescladas como se todas as instruções tivessem sido escritas em uma única regra BEGIN. Eles são executados antes que qualquer entrada seja lida. Da mesma forma, todas as regras END são mescladas e executadas quando todas as entradas são esgotadas (ou quando uma instrução exit é executada). Os padrões BEGIN e END não podem ser combinados com outros padrões em expressões de padrão. Os padrões BEGIN e END não podem ter partes de ação ausentes.
BEGINFILE e ENDFILE são padrões especiais adicionais cujas ações são executadas antes da leitura do primeiro registro de cada arquivo de entrada de linha de comando e após a leitura do último registro de cada arquivo. Dentro da regra BEGINFILE, o valor de ERRNO é a string vazia se o arquivo foi aberto com sucesso. Caso contrário, há algum problema com o arquivo e o código deve usar nextfile para ignorá-lo. Se isso não for feito, gawk produzirá seu erro fatal usual para arquivos que não podem ser abertos.
Para padrões /expressão regular/, a instrução associada é executada para cada registro de entrada que corresponde à expressão regular. As expressões regulares são essencialmente iguais às de egrep(1). Consulte https://www.gnu.org/software/gawk/manual/html_node/Regexp.html para obter detalhes sobre expressões regulares.
Uma expressão relacional pode usar qualquer um dos operadores definidos abaixo na seção de ações. Eles geralmente testam se certos campos correspondem a certas expressões regulares.
Os operadores &&, || e ! são AND lógico, OR lógico e NOT lógico, respectivamente, como em C. Eles abreviam -avaliação de circuito, também como em C, e são usados para combinar expressões de padrão mais primitivas. Como na maioria dos idiomas, parênteses podem ser usados para alterar a ordem de avaliação.
O
A forma padrão1, padrão2 de uma expressão é chamada de padrão de intervalo. Ele corresponde a todos os registros de entrada começando com um registro que corresponda a padrão1 e continuando até um registro que corresponda a padrão2, inclusive. Ele não combina com nenhum outro tipo de expressão de padrão.
As declarações de ação são colocadas entre chaves, { e }. As instruções de ação consistem nas instruções usuais de atribuição, condicional e loop encontradas na maioria das linguagens. Os operadores, instruções de controle e instruções de entrada/saída disponíveis são padronizados após aqueles em C.
Os operadores no AWK, em ordem decrescente de precedência, são:
Agrupamento
Referência de campo.
Incremento e decremento, tanto prefixo quanto posfixo.
Exponenciação.
Mais unário, menos unário e negação lógica.
Multiplicação, divisão e módulo.
Adição e subtração.
Concatenação de strings.
I/O canalizado para getline, print e printf.
Os operadores relacionais regulares.
Correspondência de expressão regular, correspondência negada.
Associação de matriz.
Lógico E.
OU Lógico.
A expressão condicional C. Tem a forma expr1 ? expr2 : expr3 . Se expr1 for verdadeiro, o valor da expressão é expr2, caso contrário, é expr3. Apenas uma das expr2 e expr3 é avaliada.
Atribuição. Tanto a atribuição absoluta (var=valor) quanto a atribuição de operador (a outra formulários) são suportados.
As declarações de controle são as seguintes:
if (condition) statement [ else statement ] while (condition) statement do statement while (condition) for (expr1; expr2; expr3) statement for (var in array) statement break continue delete array [ index ] delete array exit [ expression ] { statements } switch (expression) { case value|regex : statement . . . [ default: statement ] }
As instruções de entrada/saída são as seguintes:
Feche um arquivo, canal ou coprocesso aberto. O how opcional só deve ser usado ao fechar uma extremidade de um pipe bidirecional para um coprocesso. Deve ser um valor de string, "to" ou "from".
Defina $0 do próximo registro de entrada; definir NF, NR, FNR, RT.
Defina $0 do próximo registro do arquivo; definir NF, RT.
Defina var do próximo registro de entrada; definir NR, FNR, RT.
Defina var do próximo registro do arquivo; defina RT.
Execute comando, direcionando a saída para $0 ou var, como acima, e RT.
Execute comando como um coprocesso canalizando a saída para $0 ou var, como acima, e RT. (O comando também pode ser um soquete. Consulte a subseção Nomes de arquivos especiais, abaixo.)
Descarregue todos os buffers associados ao arquivo de saída aberto ou canal arquivo. Se arquivo estiver ausente ou se for uma string nula, limpe todos os arquivos e canais de saída abertos.
Pare de processar o registro de entrada atual. Leia o próximo registro de entrada e inicie o processamento com o primeiro padrão no programa AWK. Ao chegar ao final dos dados de entrada, execute qualquer regra END.
Pare de processar o arquivo de entrada atual. O próximo registro de entrada lido vem do próximo arquivo de entrada. Atualize FILENAME e ARGIND, redefina FNR para 1 e reinicie o processamento com o primeiro padrão no programa AWK. Ao chegar ao final dos dados de entrada, execute qualquer regra ENDFILE e END.
Imprima o registro atual. O registro de saída é encerrado com o valor de ORS.
Expressões de impressão. Cada expressão é separada pelo valor de OFS. O registro de saída é encerrado com o valor de ORS.
Expressões de impressão em arquivo. Cada expressão é separada pelo valor de OFS. O registro de saída é encerrado com o valor de ORS.
Formate e imprima.
Formate e imprima em arquivo.
Execute o comando cmd-line e retorne o status de saída. (Isso pode não estar disponível em sistemas não-POSIX.) Consulte https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions para detalhes completos sobre o status de saída.
Redirecionamentos de saída adicionais são permitidos para print e printf.
Anexe a saída ao arquivo.
Escreva em um tubo.
Envie dados para um coprocesso ou soquete. (Consulte também a subseção Nomes de arquivos especiais, abaixo.)
O comando getline retorna 1 em caso de sucesso, zero no final do arquivo e -1 em caso de erro. Se o valor errno(3) indicar que a operação de E/S pode ser repetida, e PROCINFO["input ", " RETRY"] é definido, então -2 é retornado em vez de -1, e outras chamadas para getline podem ser tentadas. Após um erro, ERRNO é definido como uma string que descreve o problema.
NOTA: A falha na abertura de um soquete bidirecional resulta em um erro não fatal sendo retornado à função de chamada. Se estiver usando um pipe, coprocess ou socket para getline, ou de print ou printf dentro de um loop, você deve use close() para criar novas instâncias do comando ou soquete. O AWK não fecha pipes, soquetes ou coprocessos automaticamente quando eles retornam EOF.
As versões AWK da instrução printf e da função sprintf() são semelhantes às de C. Para obter detalhes, consulte https://www.gnu.org/ software/gawk/manual/html_node/Printf.html.
Ao fazer o redirecionamento de E/S de print ou printf para um arquivo, ou via getline de um arquivo, gawk reconhece certos nomes de arquivos especiais internamente. Esses nomes de arquivos permitem o acesso a descritores de arquivos abertos herdados do processo pai do gawk (geralmente o shell). Esses nomes de arquivo também podem ser usados na linha de comando para nomear arquivos de dados. Os nomes dos arquivos são:
A entrada padrão.
A entrada padrão.
A saída padrão.
A saída de erro padrão.
O arquivo associado ao descritor de arquivo aberto n.
Os seguintes nomes de arquivos especiais podem ser usados com o operador de coprocesso |& para criar conexões de rede TCP/IP:
/inet/tcp/lport/rhost/rport /inet4/tcp/lport/rhost/rport /inet6/tcp/lport/rhost/rport
Arquivos para uma conexão TCP/IP na porta local lport para o host remoto rhost na porta remota rport. Use uma porta de 0 para que o sistema escolha uma porta. Use /inet4 para forçar uma conexão IPv4 e /inet6 para forçar uma conexão IPv6. Simples /inet usa o padrão do sistema (provavelmente IPv4). Utilizável apenas com o operador de E/S bidirecional |&.
/inet/udp/lport/rhost/rport /inet4/udp/lport/rhost/rport /inet6/udp/lport/rhost/rport
Semelhante, mas use UDP/IP em vez de TCP/IP.
O AWK possui as seguintes funções aritméticas integradas:
Retorna o arco tangente de y/x em radianos.
Retorne o cosseno de expr, que está em radianos.
A função exponencial.
Truncar para inteiro.
Trunque num e denom para inteiros. Retorna o quociente de num dividido por denom em resultado["quociente"] e o restante em resultado["resto"]. Esta é uma extensão gawk, principalmente útil ao trabalhar com números inteiros arbitrariamente grandes.
A função logaritmo natural.
Retorna um número aleatório N, entre zero e um, tal que 0 ≤ N < 1.
Retorne o seno de expr, que está em radianos.
Retorna a raiz quadrada de expr.
Use expr como a nova semente para o gerador de números aleatórios. Se nenhum expr for fornecido, use a hora do dia. Retorne a semente anterior para o gerador de números aleatórios.
Gawk tem as seguintes funções de string embutidas; detalhes são fornecidos em https://www.gnu.org/software/gawk/manual/html_node/String-Functions.
Retorna o número de elementos na matriz de origem s. Classifique o conteúdo de s usando as regras normais de gawk para comparar valores e substitua os índices dos valores classificados s por inteiros sequenciais começando com 1. Se a matriz de destino opcional d for especificada, primeiro duplique s em d e, em seguida, classifique d, deixando os índices da matriz de origem s inalterados. A string opcional como controla a direção e o modo de comparação. Os valores válidos para como são descritos em https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. s e d podem ser o mesmo array; isso só faz sentido ao fornecer o terceiro argumento também.
Retorna o número de elementos na matriz de origem s. O comportamento é o mesmo de asort(), exceto que os índices do array são usados para classificação, não os valores do array. Ao terminar, a matriz é indexada numericamente e os valores são os dos índices originais. Os valores originais são perdidos; portanto, forneça uma segunda matriz se desejar preservar a original. O propósito da string opcional how é o mesmo de asort(). Aqui também, s e d podem ser o mesmo array; isso só faz sentido ao fornecer o terceiro argumento também.
Pesquise a string de destino t para correspondências da expressão regular r. Se h for uma string começando com g ou G, substitua todas as correspondências de r por s . Caso contrário, h é um número que indica qual correspondência de r substituir. Se t não for fornecido, use $0 em seu lugar. Dentro do texto de substituição s, a sequência \n, onde n é um dígito de 1 a 9, pode ser usado para indicar apenas o texto que corresponde à n'ésima subexpressão entre parênteses. A sequência \0 representa todo o texto correspondente, assim como o caractere &. Ao contrário de sub() e gsub(), a string modificada é retornada como resultado da função e a string de destino original não é alterada .
Para cada substring correspondente à expressão regular r na string t, substitua a string s e retorne o número de substituições. Se t não for fornecido, use $0. Um & no texto de substituição é substituído pelo texto que foi realmente correspondido. Use \& para obter um & literal. (Isso deve ser digitado como "\\&"; consulte https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details para uma discussão mais completa das regras para e comercial e barra invertida no texto de substituição de sub(), gsub() e gensub().)
Retorna o índice da string t na string s, ou zero se t não estiver presente. (Isto implica que os índices de caracteres começam em um.)
Retorna o comprimento da string s, ou o comprimento de $0 se s não for fornecido. Com um argumento de matriz, length() retorna o número de elementos na matriz.
Retorne a posição em s onde ocorre a expressão regular r, ou zero se r não estiver presente e defina os valores de RSTART e LENGTH. Observe que a ordem dos argumentos é a mesma do operador ~: str ~ re.
Consulte https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions para obter uma descrição de como o array a é preenchido se for fornecido.
Divida a string s na matriz a e na matriz de separadores seps na expressão regular r e retorne o número de campos. Os valores dos elementos são as partes de s que correspondem a r. O valor de seps[i] é possivelmente o separador nulo que apareceu após a[i]. O valor de seps[0] é o separador inicial possivelmente nulo. Se r for omitido, FPAT será usado. As matrizes a e seps são limpas primeiro. A divisão se comporta de forma idêntica à divisão de campo com FPAT.
Divida a string s na matriz a e na matriz de separadores seps na expressão regular r e retorne o número de campos. Se r for omitido, FS será usado. As matrizes a e seps são limpas primeiro. seps[i] é o separador de campo correspondente a r entre a[<i] e a[i+1]. A divisão se comporta de forma idêntica à divisão de campo .
Imprima expr-list de acordo com fmt e retorne a string resultante.
Examine str e retorne seu valor numérico. Se str começar com um 0 inicial, trate-o como um número octal. Se str começar com um 0x ou 0X inicial, trate-o como um número hexadecimal. Caso contrário, suponha que seja um número decimal.
Assim como gsub(), mas substitua apenas a primeira substring correspondente. Retorne zero ou um.
Retorna a substring de no máximo n caracteres de s começando em i. Se n for omitido, use o restante de s.
Retorne uma cópia da string str, com todos os caracteres maiúsculos em str traduzidos para suas contrapartes minúsculas correspondentes. Os caracteres não alfabéticos permanecem inalterados.
Retorne uma cópia da string str, com todos os caracteres minúsculos em str traduzidos para suas contrapartes maiúsculas correspondentes. Os caracteres não alfabéticos permanecem inalterados.
Gawk reconhece multibyte. Isso significa que index(), length(), substr() e match() funcionam em termos de caracteres, não de bytes.
Gawk fornece as seguintes funções para obter carimbos de data/hora e formatá-los. Os detalhes são fornecidos em https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
Transforme datespec em um carimbo de data/hora do mesmo formato retornado por systime() e retorne o resultado. Se utc-flag estiver presente e for diferente de zero ou não nulo, presume-se que a hora esteja no fuso horário UTC; caso contrário, presume-se que a hora esteja no fuso horário local. Se datespec não contiver elementos suficientes ou se o tempo resultante estiver fora do intervalo, mktime() retornará -1. Consulte https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions para obter os detalhes de datespec.
Formate timestamp de acordo com a especificação em format. Se utc-flag estiver presente e for diferente de zero ou não nulo, o resultado está em UTC, caso contrário, o resultado está na hora local. O timestamp deve ter o mesmo formato retornado por systime(). Se timestamp estiver ausente, a hora atual do dia será usada. Se formato estiver ausente, um formato padrão equivalente à saída de data(1) será usado. O formato padrão está disponível em PROCINFO["strftime"]. Veja a especificação para a função strftime() em ISO C para as conversões de formato que estão disponíveis com certeza.
Retorna a hora atual do dia como o número de segundos desde a época (1970-01-01 00:00:00 UTC em sistemas POSIX).
Gawk fornece as seguintes funções de manipulação de bits. Eles funcionam convertendo valores de ponto flutuante de precisão dupla em inteiros uintmax_t, fazendo a operação e, em seguida, convertendo o resultado de volta para ponto flutuante. Passar operandos negativos para qualquer uma dessas funções causa um erro fatal.
As funções são:
Retorne o AND bit a bit dos valores fornecidos na lista de argumentos. Deve haver pelo menos dois.
Retorna o complemento bit a bit de val.
Retorna o valor de val, deslocado para a esquerda por count bits.
Retorne o OR bit a bit dos valores fornecidos na lista de argumentos. Deve haver pelo menos dois.
Retorna o valor de val, deslocado para a direita em count bits.
Retorne o XOR bit a bit dos valores fornecidos na lista de argumentos. Deve haver pelo menos dois.
As funções a seguir fornecem informações relacionadas ao tipo sobre seus argumentos.
Retorne true se x for um array, false caso contrário.
Retorna uma string indicando o tipo de x. A string será "array", "number", "regexp", "string", "strnum", "não atribuído" ou "indefinido".
As seguintes funções podem ser usadas dentro do seu programa AWK para traduzir strings em tempo de execução. Para obter detalhes completos, consulte https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
Especifique o diretório onde gawk procura os arquivos .gmo, caso eles não sejam ou não possam ser colocados nos locais ``padrão''. Ele retorna o diretório onde domain está ``bound.''
O domínio padrão é o valor de TEXTDOMAIN. Se diretório for a string nula (""), então bindtextdomain() retornará a ligação atual para o domínio especificado .
Retorna a tradução de string no domínio de texto domínio para a categoria de localidade categoria. O valor padrão para domínio é o valor atual de TEXTDOMAIN. O valor padrão para categoria é "LC_MESSAGES".
Retorna a forma plural usada para número da tradução de string1 e string2 no domínio de texto domínio para a categoria de localidade <categoria. O valor padrão para domínio é o valor atual de TEXTDOMAIN. O valor padrão para categoria é "LC_MESSAGES".
Você pode criar valores especiais de tipo booleano; consulte o manual para saber como eles funcionam e por que existem.
Com base no valor booleano de expressão, retorne um valor verdadeiro ou um valor falso. Valores verdadeiros têm valor numérico um. Valores falsos têm valor numérico zero.
As funções no AWK são definidas da seguinte forma:
função nome(lista de parâmetros) { instruções }
As funções são executadas quando são chamadas de dentro de expressões em padrões ou ações. Os parâmetros reais fornecidos na chamada da função são usados para instanciar os parâmetros formais declarados na função. Arrays são passados por referência, outras variáveis são passadas por valor.
As variáveis locais são declaradas como parâmetros extras na lista de parâmetros. A convenção é separar as variáveis locais dos parâmetros reais por espaços extras na lista de parâmetros. Por exemplo:
function f(p, q, a, b) # a and b are local { . . . } /abc/ { . . . ; f(1, 2) ; . . . }
O parêntese esquerdo em uma chamada de função é necessário para seguir imediatamente o nome da função, sem nenhum espaço em branco intermediário. Esta restrição não se aplica às funções integradas listadas acima.
As funções podem chamar umas às outras e podem ser recursivas. Os parâmetros de função usados como variáveis locais são inicializados com a string nula e o número zero na chamada da função.
Use return expr para retornar um valor de uma função. O valor de retorno é indefinido se nenhum valor for fornecido ou se a função retornar "caindo" no final.
Funções podem ser chamadas indiretamente. Para fazer isso, atribua o nome da função a ser chamada, como uma string, a uma variável. Em seguida, use a variável como se fosse o nome de uma função, prefixada com um sinal @, assim:
function myfunc() { print "myfunc called" . . . } { . . . the_func = "myfunc" @the_func() # call through the_func to myfunc . . . }
Se - -lint tiver sido fornecido, gawk avisa sobre chamadas para funções indefinidas no tempo de análise, em vez de no tempo de execução. Chamar uma função indefinida em tempo de execução é um erro fatal.
Você pode adicionar dinamicamente novas funções escritas em C ou C++ ao interpretador gawk em execução com a instrução @load. Os detalhes completos estão além do escopo desta página de manual; consulte https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.
O profiler gawk aceita dois sinais. SIGUSR1 faz com que ele despeje um perfil e uma pilha de chamada de função no arquivo de perfil, que é awkprof.out ou qualquer outro arquivo nomeado com - -profile opção. Em seguida, ele continua a ser executado. SIGHUP faz com que gawk elimine o perfil e a pilha de chamada de função e saia.
Constantes de string são sequências de caracteres entre aspas duplas. Em ambientes que não falam inglês, é possível marcar strings no programa AWK como exigindo tradução para o idioma natural local. Essas strings são marcadas no programa AWK com um sublinhado inicial (“_”). Por exemplo,
gawk 'BEGIN { print "hello, world" }'sempre imprime olá, mundo. Mas,
gawk 'BEGIN { print _"hello, world" }'pode imprimir bonjour, monde na França. Consulte https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization para ver as etapas envolvidas na produção e execução de um programa AWK localizável.
Gawk tem um número muito grande de extensões para POSIX awk. Eles são descritos em https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. Todas as extensões podem ser desativadas invocando gawk com as opções - -traditional ou - -posix.
A variável de ambiente AWKPATH pode ser usada para fornecer uma lista de diretórios que o gawk pesquisa ao procurar por arquivos nomeados por meio de -f, - -file, -i e - -include e a diretiva @include. Se a pesquisa inicial falhar, o caminho será pesquisado novamente após anexar .awk ao nome do arquivo.
A variável de ambiente AWKLIBPATH pode ser usada para fornecer uma lista de diretórios que o gawk pesquisa ao procurar por arquivos nomeados por meio de -l e - -load opções.
A variável de ambiente GAWK_PERSIST_FILE, se presente, especifica um arquivo a ser usado como armazenamento de apoio para memória persistente. Este é um recurso experimental. Consulte GAWK: Programação efetiva de AWK para obter detalhes.
A variável de ambiente GAWK_READ_TIMEOUT pode ser usada para especificar um tempo limite em milissegundos para ler a entrada de um terminal, canal ou comunicação bidirecional, incluindo soquetes.
Para conexão a um host remoto via soquete, GAWK_SOCK_RETRIES controla o número de novas tentativas e GAWK_MSEC_SLEEP o intervalo entre as novas tentativas. O intervalo é em milissegundos. Em sistemas que não suportam usleep(3), o valor é arredondado para um número inteiro de segundos.
Se POSIXLY_CORRECT existir no ambiente, gawk se comportará exatamente como se - -posix tivesse sido especificado na linha de comando. Se - -lint tiver sido especificado, gawk emitirá uma mensagem de aviso para esse efeito.
Defina GAWK_NO_MPFR_WARN no ambiente para silenciar o aviso sobre a obsolescência do modo MPFR.
Se a instrução exit for usada com um valor, gawk sairá com o valor numérico fornecido a ele.
Caso contrário, se não houver problemas durante a execução, gawk sai com o valor da constante C EXIT_SUCCESS. Isso geralmente é zero.
Se ocorrer um erro, gawk sai com o valor da constante C EXIT_FAILURE. Isso geralmente é um.
Se gawk sair devido a um erro fatal, o status de saída será 2. Em sistemas não-POSIX, esse valor pode ser mapeado para EXIT_FAILURE.
Esta página man documenta gawk, versão 5.2.
A versão original do UNIX awk foi projetada e implementada por Alfred Aho, Peter Weinberger e Brian Kernighan da Bell Laboratories. Brian Kernighan continua a mantê-lo e aprimorá-lo.
Paul Rubin e Jay Fenlason, da Free Software Foundation, escreveram o gawk, para ser compatível com a versão original do awk distribuído na Sétima Edição do UNIX. John Woods contribuiu com várias correções de bugs. David Trueman, com contribuições de Arnold Robbins, tornou o gawk compatível com a nova versão do UNIX awk. Arnold Robbins é o atual mantenedor.
Consulte GAWK: Programação efetiva de AWK para obter uma lista completa dos colaboradores do gawk e sua documentação.
Veja o arquivo README na distribuição gawk para informações atualizadas sobre mantenedores e quais portas são atualmente suportadas.
Se você encontrar um bug no gawk, use o programa gawkbug(1) para denunciá-lo.
Instruções completas para relatar um bug são fornecidas em https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Por favor leia atentamente e siga as instruções fornecidas. Isso tornará os relatórios e a resolução de bugs muito mais fáceis para todos os envolvidos. Realmente.
A opção -F não é necessária devido ao recurso de atribuição de variável de linha de comando; permanece apenas para compatibilidade com versões anteriores.
Esta página de manual é muito longa; gawk tem muitos recursos.
egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).
The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.
The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.
Print and sort the login names of all users:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Count lines in a file:
{ nlines++ }
END { print nlines }
Precede each line by its number in the file:
{ print FNR, $0 }
Concatenate and line number (a variation on a theme):
{ print NR, $0 }
Run an external command for particular lines of data:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'Brian Kernighan forneceu assistência valiosa durante o teste e a depuração. Agradecemos a ele.
Copyright © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
É concedida permissão para fazer e distribuir cópias exatas desta página de manual, desde que o aviso de direitos autorais e este aviso de permissão sejam preservados em todas as cópias.
É concedida permissão para processar este arquivo através do troff e imprimir os resultados, desde que o documento impresso contenha um aviso de permissão de cópia idêntico a este, exceto pela remoção deste parágrafo (este parágrafo não é relevante para a página de manual impressa).
É concedida permissão para copiar e distribuir versões modificadas desta página de manual sob as condições para cópia literal, desde que todo o trabalho derivado resultante seja distribuído sob os termos de um aviso de permissão idêntico a este.
É concedida permissão para copiar e distribuir traduções desta página de manual para outro idioma, sob as condições acima para versões modificadas, exceto que este aviso de permissão pode ser declarado em uma tradução aprovada pela Fundação.