AWK
As referências deste artigo necessitam de formatação. (Junho de 2022) |
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. (Setembro de 2013) |
A linguagem de programação AWK foi criada em 1977 pelos cientistas Alfred Aho, Peter J. Weinberger e Brian Kernighan no laboratório Bell Labs. A palavra AWK é uma abreviatura das iniciais dos sobrenomes dos criadores da linguagem (Aho, Weinberger e Kernighan).
AWK | |
---|---|
Paradigma | Linguagem de script, procedural, orientada a eventos |
Surgido em | 1977 |
Última versão | IEEE Std 1003.1-2004 (POSIX) / 1985 |
Criado por | Alfred Aho, Peter Weinberger, and Brian Kernighan |
Estilo de tipagem | Estática e Fraca |
Influenciada por | C, SNOBOL4, Bourne shell |
Influenciou | Tcl, AMPL, Perl, Korn Shell (ksh93, dtksh, tksh), Lua |
A linguagem é interpretada linha por linha e tem como principal objetivo deixar os scripts de Shell em sistemas POSIX mais poderosos e com muito mais recursos sem utilizar muitas linhas de comando, podendo resolver infinidades de problemas do dia-a-dia do desenvolvedor nesses sistemas operacionais.
Baseada na linguagem C, é utilizada frequentemente por desenvolvedores para processar textos e manipular arquivos. Tem como os paradigmas linguagem de script, procedural e orientada a eventos.
Esta linguagem é considerada por muitos um importante marco para história da programação, tendo tido bastante influência na criação de outras linguagens de programação, como Perl e Lua.
Variantes do AWK
editar- BWK: conhecido também como AWK ou NAWK se refere à versão por Brian Kernighan. Ele foi apelidado de "Um AWK True" por causa do uso do termo em associação com o livro que originalmente descrita a linguagem e o fato de Kernighan ter sido um dos autores originais do AWK. Esta versão é usada por exemplo nos sistemas operativos FreeBSD, NetBSD, OpenBSD e OS X .
- GAWK: (GNU AWK) é outra implementação do software livre (open source) e de implementação única que fez grandes progressos na implementação de internacionalização e localização de redes TCP/IP. Ele foi escrito antes da implementação original ter se tornado livre. Ela inclui o seu próprio depurador, e seu perfil permite ao usuário fazer melhorias de desempenho medidos para um script, e também permite que o usuário possa estender as funcionalidades através de bibliotecas compartilhadas. As distribuições Linux são em sua maioria de software GNU, e assim eles podem incluir GAWK. FreeBSD antes da versão 5.0 também incluiu GAWK versão 3.0, mas as versões posteriores do FreeBSD uso BWK para evitar a mais restritiva licença GNU General Public License (GPL), bem como por suas características técnicas.
- MAWK: é uma versão muito mais rápida da implementação AWK por Mike Brennan com base em um código de bytes intérprete.
- LIBAWK: é um fork (comando para criar threads de um processo) do MAWK, permitindo que os aplicativos para incorporar várias instâncias paralelas de intérpretes AWK.
- AWKA: é outro tradutor de scripts AWK em código C. Quando compilado, estaticamente incluindo libawka.a do autor, os executáveis resultantes são consideravelmente acelerados e, de acordo com testes do autor, comparam muito bem com outras versões do AWK, Perl , ou Tcl . Pequenos scripts vão se transformar em programas de 160-170 Kb.
- TAWK: (Thompson AWK) é um AWK compilador para Solaris , DOS , OS/2 e do Windows , anteriormente vendido por Thompson softwares de automação.
- JAWK: é um projeto para implementar AWK em Java, hospedado no SourceForge, extensões à linguagem são adicionados para fornecer acesso a recursos do Java dentro de scripts AWK (ou seja, os encadeamentos Java, soquetes, Coleções, etc.)
- XGAWK: é um projeto baseado em SourceForge GAWK. Ela se estende pela GAWK mas com bibliotecas carregadas dinamicamente.
- QSEAWK: é uma implementação intérprete incorporada do AWK incluídos na biblioteca QSE que proporciona a incorporação de interface de programação de aplicação (API) para C e C++.
- BusyBox: inclui um pouco documentada implementação AWK que parece ser completa, escrito por Dmitry Zakharov. Esta é uma implementação muito pequena adequada para sistemas embarcados.
Variáveis da Linguagem
editarNa Linguagem AWK são muitos utilizados argumentos já pre-definidos do sistema operacional (iremos utilizar linux). Criamos a tabela abaixo que ficará mais fácil de entender os próximos exemplos.
-rw-r--r-- 1 Usuario root 7022 Jul 20 2011 Cygwin.ico
-rwxr-xr-x 1 Usuario root 57 Jul 20 2011 Cygwin.bat
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 opt
$1 $2 $3 $4 $5 $6 $7 $8 $9
#$0 = Imprime toda a linha dependendo do modo que use
Exemplos de código
editarSintaxe
editar#Sintaxe da utilização do AWK simples
awk ‘<padrao-acao>’ [arquivo_1] [arquivo_2]... [arquivo_n]
Exemplo 1
editar#Exemplo abaixo ele imprime todos os clientes do arquivo lista_clientes (dentro do ambiente Unix/Linux)
bash-4.1$ awk '{print $0}' lista_clientes
Claudia Maria Salvador 555-6666
Eduardo Silva Campinas 222-3333
Juliano Mendes Manaus 333-2222
Luiz Carlos Curitiba 777-9999
Mario Sergio Florianopolis 888-7777
Maria Julia Salvador 666-8888
Exemplo 2
editar#Neste caso ele imprime somente o primeiro nome do cliente e o seu telefone referenciado
bash-4.1$ awk '{print $1,$4}' lista_clientes
Claudia 555-6666
Eduardo 222-3333
Juliano 333-2222
Luiz 777-9999
Mario 888-7777
Maria 666-8888
Exemplo 3
editar# No comando ele imprime toda linha que tiver a letra M
bash-4.1$ awk '/M/ {print}' lista_clientes
Claudia Maria Salvador 555-6666
Juliano Mendes Manaus 333-2222
Mario Sergio Florianopolis 888-7777
Maria Julia Salvador 666-8888
Exemplo 4
editar#AWK sendo utilizado em conjunto com o comando Unix ls –ltr retornando os nomes dos arquivos do argumento $9
bash-4.1$ ls -ltr | awk '{print $9}'
Cygwin.ico
Cygwin.bat
opt
usr
sbin
home
lib
var
srv
dev
etc
Documentos_Linux
bin
tmp
proc
cygdrive
Exemplo 5
editar# AWK sendo utilizado em conjunto com o comando Unix ls –ltr e o comando if/else retornando os nomes dos diretórios/arquivos
# com a ultima modificação em 2011. Lembrando que ele pode ser utilizado em conjunto com qualquer
# comando em unix, por exemplo os comandos: cat, more, ls e entre outros.
bash-4.1$ ls -ltr | awk '{if ($8 == "2011") print ($0)}'
-rw-r--r-- 1 Usuario root 7022 Jul 20 2011 Cygwin.ico
-rwxr-xr-x 1 Usuario root 57 Jul 20 2011 Cygwin.bat
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 opt
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 usr
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 sbin
drwxrwxrwt+ 1 Usuario root 0 Jul 21 2011 home
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 lib
drwxr-xr-x+ 1 Usuario root 0 Jul 21 2011 var
drwxr-xr-x+ 1 Usuario None 0 Jul 21 2011 srv
drwxr-xr-x+ 1 Usuario None 0 Jul 21 2011 dev
drwxrwxr-x+ 1 Usuario root 0 Jul 21 2011 etc
drwxrwxrw-+ 1 Usuario None 0 Jul 21 2011 Documentos_Linux
Exemplo 6
editar# O script inicializará a variável i com 1 e o comando while, enquanto o valor de i for menor ou
# igual ao número de campos da linha atual, irá imprimir
# (print) cada campo em uma linha diferente, acrescentando 1 a i após a
# impressão (print).
./camposcar.awk
awk ‘{ i = 1 while ( i <= NF ) { print $ i ++ } }’ carros
Referências
- https://web.archive.org/web/20100505144203/http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html
- http://www.zago.eti.br/script/awk.html
- http://cvsserver.cnptia.embrapa.br/files/doc103_10_0.pdf[ligação inativa]
- http://www.vivaolinux.com.br/artigo/AWK-Introducao
- http://awk.freeshell.org/
- https://web.archive.org/web/20130127171105/http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_2.html
- https://web.archive.org/web/20140420185051/http://www.lpic.com.br/shell/comandos/awk/print/print.pdf
- https://web.archive.org/web/20131126095157/http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawkA4.pdf
Bibliografia
editar- AHO, Alfred V.; KERNIGAN, Brian K.; WEINBERGER, Peter J. (1988). The AWK Programming Language. Reading, Massachusetts, EUA: Addison-Wesley. 210 páginas. ISBN 0-201-07981-X
- DOUGHERTY, Dale; ROBBINS, Arnold (1997). Sed & Awk. Beijing: O´Reilly. 407 páginas. ISBN 1-56592-225-5