Skip to main content

Como escrever comandos e scripts do AWK

Curso Kali Linux - Shell Script com NMAP (Scan de rede) (Pode 2025)

Curso Kali Linux - Shell Script com NMAP (Scan de rede) (Pode 2025)
Anonim

O comando awk é um método poderoso para processar ou analisar arquivos de texto - em particular, arquivos de dados organizados por linhas (linhas) e colunas.

Simples awk comandos podem ser executados a partir da linha de comando. Tarefas mais complexas devem ser escritas como programas awk (chamados scripts awk) em um arquivo.

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

awk 'pattern {action}' 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 toda a linha. Por exemplo:

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

Esta declaração pega o elemento da quinta coluna de cada linha e escreve como uma linha no arquivo de saída "output.txt". A variável '$ 4' refere-se à segunda 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 (o chamado espaço em branco). Então, se o arquivo de entrada "table1.txt" contiver estas linhas:

1, Justin Timberlake, título 545, preço $ 7,302, Taylor Swift, título 723, preço $ 7,903, Mick Jagger, Título 610, Preço $ 7,904, Lady Gaga, título 118, preço $ 7,305, Johnny Cash, título 482, preço R $ 6,506, Elvis Presley, título 335, preço $ 7,307, John Lennon, título 271, preço $ 7,908, Michael Jackson, título 373, preço R $ 5,50

Então o comando escreveria 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ê poderá especificar isso na instrução awk da seguinte forma:

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

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 impedir que o sistema interprete $ 7 como uma variável e, ao invés disso, pegue literalmente o cifrão.

Portanto, esta instrução awk imprime o elemento na terceira 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 ('/') é a expressão regular. Neste caso, é apenas a string "30". Isso significa que, se uma linha contiver a string "30", o sistema imprimirá o elemento na terceira coluna dessa linha. A saída no exemplo acima seria:

Timberlake, Gagá, Presley,

Se os elementos da tabela forem números, o awk poderá executar cálculos neles, como neste exemplo:

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

Além das variáveis ​​que acessam elementos da linha atual ($ 1, $ 2, etc.) existe a variável $ 0 que se refere à linha completa (linha), e a variável NF que mantém o 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; soma de impressão; } '

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

As instruções do awk são frequentemente combinadas com comandos sed.