AWK – Wikipédia, a enciclopédia livre

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 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).

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 | editar código-fonte]

  • 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[editar | editar código-fonte]

Na 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[editar | editar código-fonte]

Sintaxe[editar | editar código-fonte]

#Sintaxe da utilização do AWK simples  awk <padrao-acao> [arquivo_1] [arquivo_2]... [arquivo_n] 

Exemplo 1[editar | editar código-fonte]

#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 | editar código-fonte]

#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 | editar código-fonte]

# 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 | editar código-fonte]

#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 | editar código-fonte]

# 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 | editar código-fonte]

# 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

Bibliografia[editar | editar código-fonte]

  • 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 

Ligações externas[editar | editar código-fonte]