O AWK (ou GNU AWK) é uma linguagem de programação criada no fim dos anos 70 e utilizada até hoje, sobretudo no ambiente Linux. A forte conexão com o Linux se dá pelo uso na incrementação e otimização dos recursos presentes no shell. Mas a que ponto ele pode se tornar necessário?
Primeiramente, consideremos a vasta gama de emuladores / interpretadores do terminal do Linux. Eles têm funcionalidades interessantes para aprimorar o shell, desde a customização visual à adição de atalhos, por exemplo. Contudo, a otimização não faz com que o terminal transcenda os seus limites.
Temos de destacar, também, a possibilidade de escrevermos linhas de código para aplicar funções, como o uso do comando sed Linux e de elementos bash script — quanto a isso, recomendo a leitura deste artigo sobre programação shell script. Sem dúvidas, a prática torna o ambiente bastante funcional, porém as limitações ainda existem.
Justamente quando acredita-se que o shell não é capaz de ser explorado a níveis mais profundos, eis que entra em cena o AWK. A ideia deste artigo é apresentar essa linguagem de script e alguns comandos básicos. Ficou interessado em saber mais? Então vamos começar!
Entendendo a linguagem AWK
No site do Linux (linux.com), o AWK é definido como linguagem de programação de correspondência de padrões (expressões regulares), a qual permite escrever linhas de comando para que o sistema faça diversos tipos de tarefas. Legal, mas o que são tais expressões?
Concisamente, a expressão regular é um mecanismo de identificação de cadeias de caracteres. Por meio deste, auxiliado por um processador (engine) responsável pela interpretação dos códigos, são filtradas determinadas informações que se encaixam em um padrão textual — é como quando acionamos no browser a ferramenta find.
Quando os padrões correspondem, uma linguagem como a AWK permite ao programador, por exemplo, definir ações a serem aplicadas na determinada linha, edite uma seção de um arquivo de configuração, modifique um script etc.
Por outro lado, se o AWK não encontrar nenhuma correspondência de padrões, nenhuma ação é executada. Contudo, se ele identifica os caracteres, mas o usuário não determinou nenhuma ação, será aplicado o comando print.
Origem e utilidade da linguagem AWK
A origem do nome está relacionada às iniciais de Aho (Alfred), Weinberger (Peter) e Kernighan (Brian), acrônimo associado ao sobrenome de cada um dos desenvolvedores e que, curiosamente, forma a pronúncia “auk”, a qual se refere, também, a uma espécie de ave semelhante ao pinguim.
Baseada em C, a linguagem AWK é bastante considerada na história da programação, visto que ela influenciou no desenvolvimento de outras linguagens relevantes, como a Perl. Contudo, a peculiaridade do AWK é o seu uso para estender as funcionalidades do Shell Script.
Utilizando as expressões dessa linguagem, cuja sintaxe é relativamente simples, o usuário consegue incrementar os scripts de shell. Com isso, é possível acrescentar recursos de aprimoramento, bem como funcionalidades específicas para atender às suas necessidades.
Possibilidades oferecidas pela linguagem AWK
Usando essa linguagem de script, é possível fazer coisas incríveis por meio do processamento de texto, como a definição de variáveis e operações matemáticas, sem a necessidade de compilação.
Podemos, por exemplo, analisar todas as linhas de um arquivo e transformá-lo, produzir relatórios formatados, inserir condicionais e loops, entre outras tarefas. Certamente, você não imaginou que elas fossem possíveis de executar no ambiente shell, não é mesmo?
Supondo que o usuário queira analisar um arquivo de texto (chamado “corpo-docente.txt”) e nele identificar determinados elementos. Normalmente, o documento seria aberto e, então, lido pelo usuário por meio do comando cat.
$ cat corpo-docente.txt Output: Abraham Lincoln – Ciência Política Anthony Edward Stark – Administração e Negócios Bruce Wayne – Administração e Negócios John Forbes Nash Jr. – Matemática Wolfgang Amadeus Mozart – Música
Percebe-se que estamos falando de uma universidade cujo corpo docente é formado por grandes nomes da arte, da história e da cultura pop. No entanto, há disciplinas com mais de um professor, como no caso do curso de Jornalismo.
Se o usuário, sem vasculhar o conteúdo, deseja saber quem são esses professores em MBA, com o AWK, é possível chegar a tais elementos por meio de um tipo de pesquisa. Exemplo:
$ awk '/Jornalismo/ {print}' corpo-docente.txt Output: Clark Kent – Jornalismo Eddie Brock – Jornalismo
Agora, pense que o mesmo procedimento é aplicável em um arquivo que contém milhares de dados, retornando os resultados de busca instantaneamente? Isso é uma amostra das possibilidades trazidas pelo AWK.
Construção de variáveis com o AWK
No presente tópico, vamos aprender a fazer alguns processos básicos com o AWK; mais precisamente o uso de variáveis. Comecemos pela apresentação de dois comandos de variáveis bastante utilizados:
- NF (number of fields): quando acionado, o NF indica a quantidade de campos presente em cada linha, por exemplo;
- NR (number of records): retorna o número total de registros processados ou quantidade de linhas no arquivo;
Agora, vejamos alguns exemplos práticos. Para isso, vamos retomar a lista de célebres professores com objetivo de filtrar algumas informações (os dois primeiros nomes de cada).
$ awk '{print $0,$1}' corpo-docente.txt Output: Abraham Lincoln Albert Einstein Anthony Edward Bruce Wayne Clark Kent Eddie Brock John Forbes Rocky Balboa Stephen Hawking Walter White Wolfgang Amadeus
Se quisermos que apenas imprimir os nomes entre a quarta e a sétima linha, basta digitar a linha de comando, abaixo:
$ awk 'NR==4, NR==7 {print NR,$0}' corpo-docente.txt Output: Bruce Wayne – Administração e Negócios Clark Kent – Jornalismo Eddie Brock – Jornalismo John Forbes Nash Jr. – Matemática
Também podemos solicitar a exibição de linhas com limite mínimo de caracteres. Por exemplo (nesse caso, linhas com mais de 30 caracteres):
$ awk 'length($0) > 30' corpo-docente.txt Output: Abraham Lincoln – Ciência Política Anthony Edward Stark – Administração e Negócios Bruce Wayne – Administração e Negócios John Forbes Nash Jr. – Matemática Wolfgang Amadeus Mozart – Música
Daqui em diante, experimente praticar a sintaxe do AWK e seus comandos até que consiga aplicar otimizações no shell script. Somente com o conteúdo básico abordado no artigo já é possível agilizar muitas atividades no shell. Preparado para seguir em frente?
Se o aprendizado em Linux tem imposto muitos obstáculos, talvez esteja na hora de contar com o suporte de materiais ricos e que ensinam o essencial para dominar esse poderoso sistema operacional. Visite agora a página do Profissional Linux e saiba mais!