Skip to content

Como escrever comandos e scripts AWK

11 de abril de 2021

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 da linha de comando. Tarefas mais complexas devem ser escritas como programas awk (chamados scripts awk) em um arquivo.

Hero Images / Getty Images

 

AWK Basics

O formato básico de um comando awk é parecido com este: 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, a segunda e a 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 uma expressão condicional na frente de um bloco, a instrução dentro do bloco será executada apenas 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 tem 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 (“https://www.fiodevida.com/”) é 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. A 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 ‘{sum = 0; para (col = 1; col <= NF; col ++) soma + = $ col; imprimir soma; } ‘

Isso calcula e imprime a soma de todos os elementos de cada linha. As declarações awk são freqüentemente combinadas com comandos sed.