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
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