🧶 2/
Não tenho dúvida de que awk é a linguagem na qual eu escrevi mais programas na minha vida.
O awk serve basicamente para definir padrões a serem procurados em textos, e tratá-los quando os encontra; o programa típico em awk tem poucas linhas, e faz bastante uso de expressões regulares.
Muitas linguagens mais modernas permitem fazer o mesmo, mas a abordagem do awk é diferenciada, como ilustra esse zine da @b0rk:
🧶 3/
O awk tem o diferencial de fazer parte da especificação do Unix (e do Posix, e da LSB), então você pode esperar encontrá-lo pré-instalado na maioria dos sistemas.
Quem usa distribuições Linux em geral tenderá a encontrar o gawk (GNU Awk), que é a versão na qual houve desenvolvimento mais ativo ao longo dos anos, com extensões e suporte a vários recursos típicos das linguagens contemporâneas (inclusive internacionalização – e Unicode).
🧶 4/
Quem usa os BSDs, MacOS, iOS, Android – e outros descendentes modernos do Unix menos simpáticos ao GNU–, tende a encontrar o BWK awk, também conhecido como nawk ou one-true-awk, que é a versão ainda desenvolvida por um dos 3 autores originais.
Talvez você reconheça o nome dele de algum lugar: junto com Dennis Ritchie, Brian Kernighan escreveu o livro original sobre a linguagem C (1978), origem do termo "K&R C", além de ter sido influente no Unix e autor do primeiro programa Hello, World
🧶 5/
O one-true-awk (nawk) não teve desenvolvimento muito ativo nas últimas décadas, mas Kernighan aparentemente se incomodou com a ausência de suporte a Unicode (realmente me faz falta, quando tenho que usar nawk!) a ponto de resolver implementar suporte a UTF-8.
É um trabalho em andamento, mas os patches já começaram a aparecer no Github (https://github.com/onetrueawk/awk/commit/d322b2b5fc16484affb09e86b044596a2e347853), e este e-mail de Brian Kernighan mostra o ponto em que o desenvolvimento se encontra:
🧶 6/
Curiosidade: o mantenedor do repositório do nawk é Arnold Robbins, que há décadas é também o mantenedor do GNU awk, e autor de vários livros sobre a linguagem, como o da foto. Ele e Kernighan são amigos de longa data.
Aliás, por falar em bons livros sobre linguagens, o Brian Kernighan também anda trabalhando numa nova edição do The AWK Programming Language, de 1988 - ele contou isso, e mais, nesta entrevista publicada há alguns meses: https://www.youtube.com/watch?v=GNyQxXw_oMQ&t=6s
🧶 7/
A minha implementação preferida do awk é o Gawk, do GNU, cuja versão 5.2.0 saiu no final de 2022, com novidades que incluem o pma, um armazenamento persistente (opcional) entre execuções: o script termina, mas ao rodar novamente, ainda pode ter acesso às variáveis definidas na execução anterior.
Como curiosidade, a versão 5.2.0 também removeu suporte ao OS/2 e ao DJGPP (GNU no MS-DOS), e avisou que subiram no telhado os suportes a VAX/VMS e à aritmética com precisão arbitrária (MFPR)
🧶 8/
Como curiosidade², recentemente passei pela experiência real de ter que portar um script para 3 ambientes diferentes, cada um com sua versão de awk: tinha o one-true-awk, o gawk e o mawk. Precisou de ajustes devido a sintaxes ligeiramente diferentes de expressões regulares entre os 3.
Na prática, a minha maior dificuldade é quando preciso portar algum script pra rodar onde esteja instalada só a versão do awk incorporada ao Busybox, típica de sistemas embarcados ou de pequeno porte.
🧶 9/
Consta que as versões atuais do veloz mawk já têm suporte completo ao que o POSIX define que o AWK deveria fazer com expressões regulares.
Na versão instalada que precisei suportar na ocasião acima, ele não implementava classes de caracteres POSIX, tipo [:upper:] ou [:blank:]. Ajuste simples, ainda bem.
🧶 10/
E pra quem gosta de arqueologia digital, curta essa FAQ do comp.lang.awk, da virada do século, que tem dicas bem interessantes sobre a linguagem, mas também é um panorama de um tempo que superamos, com sistemas Unix incompatíveis entre si, discar para modems de instituições pra fazer downloads, versões para Palm Pilot etc.
http://www.faqs.org/faqs/computer-lang/awk/faq/