Comando gawk do Linux
O comando gawk é a interface do GAWK, uma poderosa linguagem de correspondência e processamento de padrões. É baseado no idioma AWK .
Descrição
Trabalhar com arquivos de texto geralmente requer tarefas repetidas. Você pode extrair determinadas linhas e descartar o restante. Ou talvez seja necessário fazer alterações sempre que determinados padrões aparecerem, mas deixe o restante do arquivo em paz. Escrever programas de uso único para essas tarefas em linguagens como C , C ++ ou Java é demorado e inconveniente. Esses trabalhos geralmente são mais fáceis com o awk . O utilitário awk interpreta uma linguagem de programação para fins especiais que facilita o gerenciamento de tarefas simples de reformatação de dados.
A implementação GNU do awk é chamada de gawk ; se você o chamar com as opções apropriadas ou variáveis de ambiente (consulte Opções), ele será totalmente compatível com a especificação POSIX da linguagem awk e com a versão Unix do awk mantida por Brian Kernighan .
O uso do awk (ou gawk ) permite:
- Gerenciar bancos de dados pessoais pequenos
- Gere relatórios
- Validar dados
- Produza índices e execute outras tarefas de preparação de documentos
- Experimente algoritmos que você pode adaptar posteriormente a outras linguagens de computador
Além disso, o gawk fornece instalações que facilitam:
- Extrair bits e dados para processamento
- Classificar dados
- Realize comunicações de rede simples
Sintaxe
gawk [ opções de estilo POSIX ou GNU ] -f program-file [-] file ...
gawk [ opções de estilo POSIX ou GNU ] [-] arquivo de texto do programa ...
pgawk [ opções de estilo POSIX ou GNU ] -f program-file [-] file ...
pgawk [ opções de estilo POSIX ou GNU ] [-] arquivo de texto do programa ...
dgawk [ opções de estilo POSIX ou GNU ] -f program-file [-] file ...
Formato da opção
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 os recursos específicos do GNU e para os recursos exigidos pelo POSIX.
As opções específicas do gawk geralmente são usadas na forma de opção longa. Os argumentos para as opções longas são unidos à opção por um sinal = , sem espaços em branco ou podem ser fornecidos no próximo argumento da linha de comandos . As opções longas podem ser abreviadas, desde que a abreviação permaneça única.
Além disso, cada opção longa possui uma opção curta correspondente, para que a funcionalidade da opção possa ser usada a partir de #! scripts executáveis .
Opções
-f arquivo de programa, – arquivo de programa | Leia a fonte do programa AWK no arquivo file -file , em vez do primeiro argumento da linha de comandos. Várias opções -f (ou –file ) podem ser usadas. |
-F fs , –fs separador de campos | Use fs para o separador de campos de entrada (o valor da variável predefinida FS ). |
-v var = val , –assign var = val | Atribua o valor val à variável var , antes do início da execução do programa. Esses valores variáveis estão disponíveis no bloco BEGIN de um programa AWK. |
-b , –characteres como bytes | Trate todos os dados de entrada como caracteres de byte único. Em outras palavras, não preste atenção às informações de localidade ao tentar processar seqüências de caracteres como caracteres multibyte. A opção –posix substitui essa opção. |
-c , – tradicional | Execute no modo de compatibilidade. No modo de compatibilidade, o gawk se comporta de maneira idêntica ao do UNIX awk; nenhuma das extensões específicas do GNU é reconhecida. Veja EXTENSÕES GNU, abaixo, para mais informações. |
-C , – direitos autorais | Imprima a versão curta da mensagem de informação GNU Copyright na saída padrão e saia com sucesso. |
-d [ arquivo ], –dump-variable [= arquivo ] | Imprima uma lista classificada de variáveis globais, seus tipos e valores finais para arquivar . Se nenhum arquivo for fornecido, o gawk utilizará um arquivo chamado awkvars.out no diretório atual. Ter uma lista de todas as variáveis globais é uma boa maneira de procurar erros tipográficos em seus programas. Você também usaria essa opção se tiver um programa grande com muitas funções e quiser ter certeza de que suas funções não usam inadvertidamente variáveis globais que você queria que fossem locais. Esse é um erro particularmente fácil de cometer nomes simples de variáveis como i , j e assim por diante. |
-e program-text , –source program-text | Use o texto do programa como código-fonte do programa AWK. Esta opção permite a fácil mistura de funções da biblioteca (usada pelas opções -f e –file ) com o código-fonte inserido nos programas de comando usados nos scripts de shell. |
Arquivo -E , arquivo –exec | Semelhante a -f , no entanto, esta é a última opção processada. Isso deve ser usado com #! scripts, especialmente para aplicativos CGI , para evitar a transmissão de opções ou código fonte (!!!) na linha de comando a partir de uma URL . Esta opção desativa as atribuições de variável da linha de comando. |
-g , –gen-pot | Examine e analise o programa AWK e gere um arquivo no formato GNU .pot (Portable Object Template) na saída padrão com entradas para todas as seqüências de caracteres localizáveis no programa. O programa em si não é executado. Veja a distribuição gettext GNU para mais informações sobre arquivos .pot . |
-h , –help | Imprima um resumo relativamente curto das opções disponíveis na saída padrão. Pelos padrões de codificação GNU, essas opções causam uma saída imediata e bem-sucedida. |
-L [ valor ], –lint [ = valor ] | Forneça avisos sobre construções duvidosas ou não portáveis para outras implementações do AWK. Com um argumento opcional de fatal, os avisos de fiapos se tornam erros fatais. Isso pode ser drástico, mas seu uso certamente incentivará o desenvolvimento de programas AWK mais limpos. Com um argumento opcional inválido, apenas avisos sobre coisas que são realmente inválidas são emitidos. Nota: Isso ainda não está totalmente implementado. |
-n , –não-decimal-dados | Reconhecer valores octais e hexadecimais nos dados de entrada. Use esta opção com muito cuidado! |
-N , –use-lc-numérico | Isso força o gawk a usar o caractere de ponto decimal da localidade ao analisar dados de entrada. Embora o padrão POSIX exija esse comportamento, e o gawk o faz quando –posix está em vigor, o padrão é seguir o comportamento tradicional e usar um ponto como ponto decimal, mesmo em locais onde o ponto não é o caractere do ponto decimal. Esta opção substitui o comportamento padrão, sem o rigor draconiano completo da opção –posix . |
-O , – otimizar | Ative otimizações na representação interna do programa. Atualmente, isso inclui apenas dobragem constante simples. O mantenedor gawk espera adicionar otimizações adicionais ao longo do tempo. |
-p [ prof_file ], –profile [ = prof_file ] | Envie dados de criação de perfil para prof_file . O padrão é awkprof.out . Quando executado com o gawk , o perfil é apenas uma versão “bastante impressa” do programa. Quando executado com pgawk , o perfil contém contagens de execução de cada instrução no programa na margem esquerda e contagens de chamadas de função para cada função definida pelo usuário. |
-P , –posix | Isso ativa o modo de compatibilidade, com as seguintes restrições adicionais: \ x seqüências de escape não são reconhecidas Somente espaço e tab atuam como separadores de campo quando FS é definido como um espaço único, a nova linha não Você não pode continuar as linhas depois ? e : A função sinônimo da função de palavra-chave não é reconhecida Os operadores ** e ** = não podem ser usados no lugar de ^ e ^ = A função fflush () não está disponível |
-r , –re-interval | Ative o uso de expressões de intervalo na correspondência de expressões regulares. As expressões de intervalo não estavam tradicionalmente disponíveis na linguagem AWK. O padrão POSIX os adicionou, para tornar o awk e o egrep consistentes entre si. Eles estão ativados por padrão, mas esta opção permanece para uso com –traditional . |
-R , – arquivo de comando | Apenas Dgawk . Leia os comandos do depurador armazenados do arquivo. |
-S , –sandbox | Executa o gawk no modo sandbox, desativando a função system () , redirecionando a entrada com getline , redirecionando a saída com print e printf e carregando extensões dinâmicas. A execução de comandos (através de pipelines ) também está desativada. Isso efetivamente impede que um script acesse recursos locais (exceto os arquivos especificados na linha de comando). |
-t , –lint-old | Forneça avisos sobre construções que não são portáveis para a versão original do Unix awk. |
-V , –version | Imprima as informações da versão desta cópia específica do gawk na saída padrão. Isso é útil principalmente para saber se a cópia atual do gawk no seu sistema está atualizada em relação ao que a Free Software Foundation está distribuindo. Isso também é útil ao relatar erros. Pelos padrões de codificação GNU, essas opções causam uma saída imediata e bem-sucedida. |
– | Sinalize o final das opções. Isso é útil para permitir que novos argumentos para o próprio programa AWK iniciem com um ” – “. Isso fornece consistência com a convenção de análise de argumento usada pela maioria dos outros programas POSIX. |
No modo de compatibilidade, quaisquer outras opções são sinalizadas como inválidas, mas são ignoradas. Em operação normal, desde que o texto do programa tenha sido fornecido, opções desconhecidas são passadas para o programa AWK na matriz ARGV para processamento. Isso é particularmente útil para executar programas AWK através do mecanismo de interpretador executável ” #! “.
Execução do Programa AWK
Um programa AWK consiste em uma sequência de instruções de ação padrão e definições de funções opcionais.
@include o padrão " nome do arquivo " { declarações de ação } nome da função ( lista de parâmetros ) { declarações }
O gawk primeiro lê a fonte do programa a partir do (s) arquivo (s) de programa, se especificado, dos argumentos para –source ou do primeiro argumento não opcional na linha de comando. As opções -f e –source podem ser usadas várias vezes na linha de comando. O gawk lê o texto do programa como se todos os arquivos de programa e textos de origem da linha de comando tivessem sido concatenados . Isso é útil para criar bibliotecas de funções AWK, sem precisar incluí-las em cada novo programa AWK que as utiliza. Ele também oferece a capacidade de misturar funções da biblioteca com programas de linha de comando.
Além disso, as linhas que começam com @include podem ser usadas para incluir outros arquivos de origem no seu programa, facilitando ainda mais o uso da biblioteca.
A variável de ambiente AWKPATH especifica um caminho de pesquisa a ser usado ao localizar arquivos de origem nomeados com a opção -f . Se essa variável não existir, o caminho padrão será ” .: / 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 para a opção -f contiver um caractere ” / “, nenhuma pesquisa de caminho será realizada.
O gawk executa programas AWK na seguinte ordem. Primeiro, todas as atribuições de variáveis especificadas pela opção -v são executadas. Em seguida, o gawk compila o programa em um formulário interno. Em seguida, o gawk executa o código no (s) bloco (s) BEGIN (se houver) e depois lê cada arquivo nomeado no array ARGV (até ARGV [ARGC] ). Se não houver arquivos nomeados na linha de comando, o gawk lerá 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 após a execução de qualquer bloco BEGIN . A atribuição de variável da linha de comando é mais útil para atribuir valores dinamicamente às variáveis que o AWK usa para controlar como a entrada é dividida em campos e registros. Também é útil para controlar o estado se forem necessárias várias passagens em um único arquivo de dados.
Se o valor de um elemento específico do ARGV estiver vazio (“”), o gawk o ignorará .
Para cada arquivo de entrada, se existir uma regra BEGINFILE , o gawk executa o código associado antes de processar o conteúdo do arquivo. Da mesma forma, o gawk executa o código associado ao ENDFILE após o processamento do arquivo.
Para cada registro na entrada, o gawk testa para ver se ele corresponde a algum padrão no programa AWK. Para cada padrão que o registro corresponde, a ação associada é executada. Os padrões são testados na ordem em que ocorrem no programa.
Finalmente, depois que toda a entrada é esgotada, o gawk executa o código no (s) bloco (s) END (se houver).
Guia oficial do usuário do gawk
Se você quiser aprender mais sobre essa linguagem incrivelmente poderosa, consulte o Guia do Usuário do GNU gawk.
Exemplos
gawk '{num_fields = num_fields + NF} END {print num_fields} '
Imprima o número total de campos em todas as linhas de entrada.
gawk 'length ($ 0)> 80'
Imprime todas as linhas com mais de 80 caracteres. A regra única tem uma expressão relacional como padrão e não possui ação (portanto, a ação padrão, imprimindo o registro, é usada).
arquivos ls -l | awk '{x + = $ 4}; END {print "total de bytes:" x} '
Imprime o número total de bytes usados pelos arquivos.
Comandos relacionados
awk – Intérprete para a linguagem de programação de processamento de texto AWK.
sed – Um utilitário para filtrar e transformar texto.