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.