Como escrever comandos e scripts AWK

O comando awk é um método poderoso para processar ou analisar arquivos de texto. Em particular, ele analisa arquivos de dados que são organizados por linhas (linhas) e colunas. Comandos awk simples podem ser executados a partir do linha de comando. Tarefas mais complexas devem ser escritas como programas awk (chamados de scripts awk) em um arquivo.

Designer gráfico trabalhando até tarde no computador no escritório
Hero Images / Getty Images

AWK Basics

O formato básico de um comando awk é assim:

awk 'padrão {ação}' arquivo de entrada> arquivo de saída

Isso significa: pegue cada linha do arquivo de entrada; se a linha contiver o padrão, aplique a ação à linha e grave a linha resultante no arquivo de saída. Se o padrão for omitido, a ação será aplicada a todas as linhas. Por exemplo:

awk '{print $ 5}' table1.txt> output1.txt

A instrução acima pega o elemento da 5ª coluna de cada linha e o grava como uma linha no arquivo de saída "output.txt". A variável '$ 4' refere-se à quarta coluna. Da mesma forma, você pode acessar a primeira, segunda e terceira coluna, com $ 1, $ 2, $ 3, etc. Por padrão, as colunas são consideradas separadas por espaços ou tabulações (os chamados espaços em branco). Portanto, se o arquivo de entrada "table1.txt" contiver estas linhas:

1, Justin Timberlake, Título 545, Preço $ 7,30
2, Taylor Swift, Título 723, Preço $ 7,90
3, Mick Jagger, Título 610, Preço $ 7,90
4, Lady Gaga, Título 118, Preço $ 7,30
5, Johnny Cash, Título 482, Preço $ 6,50
6, Elvis Presley, Título 335, Preço $ 7,30
7, John Lennon, Título 271, Preço $ 7,90
8, Michael Jackson, Título 373, Preço $ 5,50

Em seguida, o comando gravaria as seguintes linhas no arquivo de saída "output1.txt":

545,
723,
610,
118,
482,
335,
271,
373,

Se o separador de coluna for algo diferente de espaços ou tabulações, como uma vírgula, você pode especificar isso na instrução awk da seguinte maneira:

awk -F, '{print $ 3}' table1.txt> output1.txt

Isso selecionará o elemento da coluna 3 de cada linha se as colunas forem consideradas separadas por uma vírgula. Portanto, a saída, neste caso, seria:

Título 545
Título 723
Título 610
Título 118
Título 482
Título 335
Título 271
Título 373

Expressões condicionais em AWK

A lista de declarações dentro das chaves ('{', '}') é chamada de bloco. Se você colocar um expressão condicional na frente de um bloco, a instrução dentro do bloco será executada somente se a condição for verdadeira.

awk '$ 7 == "\ $ 7,30" {print $ 3}' table1.txt

Nesse caso, a condição é $ 7 == "\ $ 7,30", o que significa que o elemento na coluna 7 é igual a $ 7,30. A barra invertida na frente do cifrão é usada para evitar que o sistema interprete $ 7 como uma variável e, em vez disso, interprete o cifrão literalmente.

Portanto, esta instrução awk imprime o elemento na 3ª coluna de cada linha que possui um "$ 7,30" na coluna 7.

Você também pode usar expressões regulares como condição. Por exemplo:

awk '/ 30 / {print $ 3}' table1.txt

A string entre as duas barras ('/') é a expressão regular. Nesse caso, é apenas a string "30". Isso significa que se uma linha contém a string "30", o sistema imprime o elemento na 3ª coluna dessa linha. o saída no exemplo acima seria:

Timberlake,
Gagá,
Presley,

Realizar cálculos em AWK

Se os elementos da tabela forem números, awk pode executar cálculos sobre eles como neste exemplo:

awk '{print ($ 2 * $ 3) + $ 7}'

Além das variáveis ​​que acessam os elementos da linha atual ($ 1, $ 2, etc.), existe a variável $ 0 que se refere à linha completa (linha), e a variável NF que se refere ao número de campos.

Você também pode definir novas variáveis ​​como neste exemplo:

awk '{soma = 0; para (col = 1; col <= NF; col ++) soma + = $ col; imprimir soma; }'

Isso calcula e imprime a soma de todos os elementos de cada linha.

Declarações awk são freqüentemente combinadas com comandos sed.