Como usar o comando awk no Linux

No Linux, awk é um dínamo de manipulação de texto de linha de comando, bem como uma linguagem de script poderosa. Aqui está uma introdução a alguns de seus recursos mais interessantes.

Como awk ganhou esse nome

O comando awk foi nomeado usando as iniciais das três pessoas que escreveram a versão original em 1977: Alfred Aho, Peter Weinberger, e Brian Kernighan. Esses três homens eram da lendária AT&T Bell Laboratories Pantheon Unix. Com a contribuição de muitos outros desde então, o awk continuou a evoluir.

É uma linguagem de script completa, bem como um kit de ferramentas de manipulação de texto completo para a linha de comando. Se este artigo abrir seu apetite, você pode verifique cada detalhe sobre o awk e sua funcionalidade.

Regras, padrões e ações

awk funciona em programas que contêm regras compostas de padrões e ações. A ação é executada no texto que corresponde ao padrão. Os padrões são colocados entre chaves ({}). Juntos, um padrão e uma ação formam uma regra. Todo o programa awk está entre aspas simples (‘).

Vamos dar uma olhada no tipo mais simples de programa awk. Não tem padrão, portanto, corresponde a todas as linhas de texto inseridas nele. Isso significa que a ação é executada em todas as linhas. Bem use-o na saída de o quem comanda.

Aqui está o resultado padrão de quem:

who

Talvez não precisemos de todas essas informações, mas, sim, queremos apenas ver os nomes nas contas. Podemos canalizar a saída de who para o awk e, em seguida, dizer ao awk para imprimir apenas o primeiro campo.

Por padrão, o awk considera um campo como uma string de caracteres cercada por um espaço em branco, o início de uma linha ou o final de uma linha. Os campos são identificados por um cifrão ($) e um número. Portanto, $ 1 representa o primeiro campo, que usaremos com a ação print para imprimir o primeiro campo.

Nós digitamos o seguinte:

who | awk '{print $1}'

awk imprime o primeiro campo e descarta o resto da linha.

Podemos imprimir quantos campos quisermos. Se adicionarmos uma vírgula como separador, awk imprime um espaço entre cada campo.

Digitamos o seguinte para também imprimir a hora em que a pessoa se conectou (campo quatro):

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

Existem alguns identificadores de campo especiais. Eles representam toda a linha de texto e o último campo na linha de texto:

$ 0: representa toda a linha de texto.
$ 1: representa o primeiro campo.
$ 2: representa o segundo campo.
$ 7: representa o sétimo campo.
$ 45: representa o 45º campo.
$ NF: Significa “número de campos” e representa o último campo.

Vamos digitar o seguinte para abrir um pequeno arquivo de texto que contém uma pequena citação atribuída a Dennis Ritchie:

cat dennis_ritchie.txt

O

Queremos que o awk imprima o primeiro, o segundo e o último campo da citação. Observe que, embora esteja enrolado na janela do terminal, é apenas uma única linha de texto.

Nós digitamos o seguinte comando:

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

Não conhecemos essa “simplicidade”. é o 18º campo na linha de texto, e não nos importamos. O que sabemos é que é o último campo e podemos usar $ NF para obter seu valor. O período é apenas considerado mais um personagem no