runawk é um pequeno invólucro para AWK intérprete que impements módulo do sistema e ajuda a escrever os programas AWK autônomos.
MOTIVAÇÃO
Depois de anos usando AWK para a programação que eu achei que, apesar de
sua simplicidade e limitações AWK é bom o suficiente para execução de scripts de uma ampla
gama de diferentes tarefas. AWK não é tão potente como a sua maior
homólogos, como Perl, Ruby, TCL e outros, mas ele tem o seu próprio
vantagens como compacidade, simplicidade e disponibilidade em quase todos
Sistemas Unix-like. Eu, pessoalmente, também gosto de sua natureza orientada a dados e
orientação forma, técnica muito útil para o processamento de texto simples
utilitários.
Mas A! Infelizmente awk intérpretes carece de algumas características importantes e
às vezes não funciona tão bom quanto ele whould ser.
Alguns problemas que eu vejo (alguns deles, é claro).
1) AWK não tem suporte para módulos. Mesmo se eu criar pequenos programas, I
muitas vezes querem usar as funções criados anteriormente e já utilizado em
outros scripts. Ou seja, ele Whould ótimo orginise funções em
chamada bibliotecas (módulos).
2) A fim de passar argumentos para #! / Usr / bin / awk -f roteiro (não awk
intérprete), é necessário para uma lista de prepand
argumentos com - (dois signes menos). No meu ponto de vista, isso parece mal.
Exemplo:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; INÍCIO {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; for (i = 1; i
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
Sessão Shell:
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; / Usr / bin / awk: opção desconhecida --opt1 ignorado
& Nbsp; & nbsp; & nbsp; / Usr / bin / awk: opção desconhecida --opt2 ignorado
& Nbsp; & nbsp; & nbsp; % Awk_program - --opt1 --opt2
& Nbsp; & nbsp; & nbsp; ARGV [1] = - OPT1
& Nbsp; & nbsp; & nbsp; ARGV [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
Na minha opinião awk_program script deve funcionar assim (como
programas normais fazem)
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; ARGV [1] = - OPT1
& Nbsp; & nbsp; & nbsp; ARGV [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
É possível usar runawk.
3) Quando #! / Usr / bin / awk -f script lida com argumentos (opções) e quer
para ler de stdin, é necessário adicionar
/ Dev / stdin (ou '-') como um último argumento explicitamente.
Exemplo:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; INÍCIO {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; if (argv [1] == "--flag") {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; flag = 1
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ARGV [1] = "" # para não ler o arquivo com o nome "--flag"
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print "flag =" bandeira "$ 0 =" $ 0
& Nbsp; & nbsp; & nbsp; }
Sessão Shell:
& Nbsp; & nbsp; & nbsp; % Echo teste | awk_program - --flag
& Nbsp; & nbsp; & nbsp; % Echo teste | awk_program - --flag / dev / stdin
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = test
& Nbsp; & nbsp; & nbsp; %
Idealmente awk_program deve funcionar como este
& Nbsp; & nbsp; & nbsp; Teste echo% | awk_program --flag
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = test
& Nbsp; & nbsp; & nbsp; %
Todos estes probles são resolvidos por runawk e é por isso que eu escrevi.
Eu também incluir alguns módulos para runawk distribuição que são
útil para mim e eu espero que seja útil para você também.
Instalação
0) BSD composição é necessária. I nomeia-o apenas 'fazer', mas seu nome real pode
& Nbsp; & nbsp; variar. & nbsp; bmake e pmake são possíveis nomes.
& Nbsp; & nbsp; Se você precisar alterar as opções de construção padrão,
& Nbsp; & nbsp; executar fazer como este
& Nbsp; & nbsp; & nbsp; & nbsp; env [YOUR_ASSIGNMENTS] make
& Nbsp; & nbsp; Veja o exemplo abaixo seção
1) tarball Uncompress que você tenha baixado como este
& Nbsp; & nbsp; gzip -dc runawk-X-Y-Z.tar.gz | tar -xf-
2) cd runawk-X-Y-Z
3) fazer
4) (opcional!) Make install-dirs
5) make install
Há uma série de variáveis Makefile que pode ser alterado durante
. instalação & nbsp; Variáveis próprias do Runawk (Tudo o que eles estão no início de
Makefile):
& Nbsp; PREFIX & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Onde está instalada a runawk
& Nbsp; MODULESDIR & nbsp; & nbsp; & nbsp; & nbsp; - Diretório onde os módulos são instalados
& Nbsp; AWK_PROG & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Caminho para awk intérprete
& Nbsp; STDIN_FILENAME - caminho para o arquivo de dispositivo stdin
Variáveis BSD do make (mais comumente utilizados,
para todos os outros - consulte a documentação do make e arquivos .mk)
& Nbsp; BINDIR - onde runawk executável em si é instalado
& Nbsp; MANDIR - onde as páginas do manual são instalados
& Nbsp; BINOWN - runawk proprietário executável
& Nbsp; BINGRP - runawk grupo executável
& Nbsp; MANOWN - página proprietário homem
& Nbsp; MANGRP - homem do grupo de páginas
Exemplo:
& Nbsp; & nbsp; env CC = gcc
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; PREFIX = / home / cheusov / local
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDFLAGS = '- L / usr / pkg / lib -Wl, -rpath -Wl, / usr / pkg / lib'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDADD = -lextralib
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CFLAGS = '- Werror -Wall'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CPPFLAGS = -I / usr / pkg / include
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINGRP = usuários
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANGRP = usuários
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MKCATPAGES = nenhum
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; -s fazer tudo instalar-dirs instalar
O que é novo nesta versão:
- As opções -i, -I e todas as opções de comprimento foram completamente removido.
- O -T opção foi adicionada para a entrada de guias.
- A opção -v é documentado na página do manual.
- Correções para avisos gcc compilação.
- Correções para compilação com MAKEOBJDIR não vazio.
- Correção de erros em Nova, runcmd.awk e páginas do manual.
O que é novo na versão 1.4.4:
- Um bug na remoção de subdiretórios em um diretório temporário foi fixa.
- Melhorias para runawk_modules.3.
O que é novo na versão 1.4.3:
- paexec (1) não usa o sistema ( 3) mais para remover o diretório temporário.
- O print_help function () foi movida a partir do módulo power_getopt.awk para init_getopt.awk.
O que é novo na versão 1.4.2:
- Esta versão acrescenta runawk_modules.3 onde todos os módulos estão documentada, deprecates opções longas, remove as opções -i e -i, e inclui páginas man no tarball distribuição de modo pod2man não é necessária para a construção.
O que é novo na versão 1.4.0:
- Em exitnow.awk, o exitnow (status) função agora termina a execução do script sem correr seções final, mesmo se o status == 0.
- O novo módulo io.awk inclui as funções is_ {file, dir, exec, socket, fifo, blockdev, chardev, link simbólico}, file_size e file_type. tokenre.awk tem o novo splitre0 function ().
O que é novo na versão 1.3.2:
- matrizes internos são agora transferida automaticamente. Isso corrige uso de runawk (1) em combinação com xargs (1), por exemplo, files.txt gato |. Xargs runawk -e '...'
O que é novo na versão 1.3.0:
- A correção para uma mensagem de aviso do compilador Intel C.
- A correção para o shquote function () a partir de módulos / shquote.awk.
- O código-fonte do projeto foi reorganizada, permitindo assim uma fácil instalação de qualquer subprojeto:. Exemplos, módulos, runawk, alt_getopt, e doc (TODO, README, etc. arquivos)
O que é novo na versão 1.1.0:
- A opção -F foi adicionado
- Novos ord.awwas ftrans_in.awk e módulos glob.awk foram incluídos.
- Um novo executável alt_getopt foi incluído para analisar opções de curtas e longas em shell scripts.
- New min3, min4, min5, min_key, MIN_VALUE e key_of_min_value (min.awk) e max3, Max4, max5, max_key, max_value e key_of_max_value (max.awk) funções foram fornecidos.
- foram adicionadas novas amostras:. Examples / demo_minmax, exemplos / demo_tokenre3, exemplos / demo_ftrans, exemplos / demo_glob *
- Um novo recurso foi adicionado em multisub.awk.
- Pequenas melhorias foram feitas no âmbito do processo de instalação.
O que é novo na versão 0.16.0:
- foram criados muitos programas de demonstração para a maioria dos módulos runawk e eles estão em examples / subdiretório agora. Novo módulo MEGA;-) power_getopt.awk Veja a documentação e exemplos de programas demo / demo_power_getopt. Faz opções de manuseio muito fácil. Novos módulos: embed_str.awk has_suffix.awk has_prefix.awk readfile.awk modinfo.awk pequenas correções e melhorias na dirname.awk e basename.awk. Agora, eles são totalmente compatíveis com dirname (1) e nome base (1) RUNAWK define as seguintes variáveis de ambiente para o subprocess awk criança: RUNAWK_MODC - Uma série de módulos (filename -f) passado para AWK RUNAWK_MODV_ - Caminho completo para o módulo #n , onde n é em [0..RUNAWK_MODC) gama. RUNAWK define variável de ambiente RUNAWK_ART_STDIN para o subprocess awk criança a 1, se forem complementares / artificial '-' foi adicionado à lista de argumentos do awk. Makefile: bmake-ism foram removidos. Agora Makefile é totalmente compatível com o FreeBSD make. Alvo CLEANFILES é usado em vez de regras feitas à mão pequena correção em target 'test_all'
Comentários não encontrado