AWK: Como Otimizar E Adicionar Recursos Ao Shell Script No Linux

JUNTE-SE A MAIS DE 110.000 PESSOAS QUE JÁ TEM UMA CÓPIA

Ubuntu: Iniciando com Linux de maneira prática e rápida

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

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!

awk linguagem programação para shell

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!

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Artigos Recentes

Aprenda a dominar o Linux de uma vez por todas

Aprenda a dominar o Linux de uma vez por todas