Domine o Awk: Manipule Texto no Linux com Facilidade!

No universo do Linux, o awk se destaca como uma ferramenta de linha de comando formidável para manipulação de texto, funcionando também como uma linguagem de script robusta. Este artigo oferece uma introdução a algumas de suas funcionalidades mais notáveis.

A Origem do Nome awk

O nome do comando awk é uma homenagem aos seus criadores originais, cujas iniciais foram usadas para batizá-lo: Alfred Aho, Peter Weinberger e Brian Kernighan. Esses três renomados profissionais pertenciam ao panteão Unix do AT&T Bell Laboratories. Ao longo dos anos, com a contribuição de muitos outros, o awk continuou sua evolução.

Ele se apresenta como uma linguagem de script completa e uma caixa de ferramentas versátil para manipulação de texto diretamente pela linha de comando. Se este artigo despertar seu interesse, você pode explorar todos os detalhes sobre o awk e suas capacidades.

Estrutura: Regras, Padrões e Ações

O awk opera através de programas que consistem em regras formadas por padrões e ações. Uma ação é executada quando um padrão correspondente é encontrado no texto. Os padrões são delimitados por chaves ({}), e a combinação de um padrão e uma ação cria uma regra. Todo o programa awk é encapsulado por aspas simples (‘).

Vamos analisar o programa awk mais elementar. Sem nenhum padrão especificado, ele se aplica a todas as linhas de texto que recebe, executando a ação em cada uma delas. Para exemplificar, vamos empregá-lo na saída do comando who.

Aqui está a saída padrão do comando who:

who

Suponha que desejemos extrair apenas os nomes de usuário, omitindo as demais informações. Podemos direcionar a saída do comando who para o awk e instruir o awk a exibir apenas o primeiro campo.

No awk, um campo é definido como uma sequência de caracteres delimitada por espaços em branco, o início ou o fim de uma linha. Cada campo é identificado por um cifrão ($) seguido de um número. Assim, $1 representa o primeiro campo, que usaremos com a ação ‘print’ para exibir esse campo.

O comando é:

who | awk '{print $1}'

O awk então imprime o primeiro campo, descartando o restante da linha.

Podemos escolher quais campos exibir. Ao inserir uma vírgula como separador, o awk adiciona um espaço entre cada campo exibido.

Para exibir também a hora de login (quarto campo), o comando seria:

who | awk '{print $1,$4}'

Existem também identificadores de campo especiais, que representam a linha inteira e o último campo:

$0: A linha de texto completa.
$1: O primeiro campo.
$2: O segundo campo.
$7: O sétimo campo.
$45: O quadragésimo quinto campo.
$NF: Significa “número de campos” e representa o último campo.

Vamos analisar um pequeno arquivo de texto que contém uma citação atribuída a Dennis Ritchie:

cat dennis_ritchie.txt

Nosso objetivo é que o awk exiba o primeiro, o segundo e o último campo dessa citação. Apesar de aparecer dividida na janela do terminal, a citação consiste em uma única linha de texto.

O comando para isso seria:

awk '{print $1,$2,$NF}' dennis_ritchie.txt

A palavra “simplicidade”, que aparece na imagem, é o 18º campo da linha, mas não precisamos dessa informação. O importante é que ele é o último campo, e podemos usar $NF para obter seu valor. A pontuação é tratada como parte do último campo.