Articles

awk scripting explicado com exemplos práticos

Posted on

O comando / ferramenta awk é utilizado para manipular linhas e colunas de texto num ficheiro. Awk tem funções de string e arrays associativos incorporados. Awk suporta a maioria dos operadores, blocos condicionais e disponíveis em linguagem C. awk scripting

awk scripting

Uma das coisas boas é que podemos usar o comando awk juntamente com outros comandos para atingir a saída necessária. Também podemos converter a script awk para perl.

Basic systax of awk: BEGIN {start_action} {acção} {acção} END {stop_action}’ file_name

Aqui estão as acções

  • Begin block is performed before the file
  • End block is performed after processing the file
  • Rest das acções são executadas durante o processamento do ficheiro

Exemplos: Criar um ficheiro com o teste do nome abaixo dos dados nele

# cat test

De cima dos dados, pode-se observar que o ficheiro tem linhas e colunas separadas por espaço e as linhas são novas linhas. Para explicar este artigo vamos utilizar o ficheiro de teste para poucos exemplos.

Sintaxe de comando: awk ‘{print $3}’ test

Aqui $3 tem um significado imprimir as 3ªs colunas de todas as colunas do ficheiro de teste. No modo como pretende imprimir várias colunas mencione os nomes das colunas separados por vírgula $1,$2,$3….. abaixo está a saída que como 3ª coluna em todas as linhas

# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr

Para imprimir a 4ª e 6ª colunas num ficheiro use awk ‘{print $4,$6}’ test

Aqui os blocos de início e fim não são usados em awk. Assim, o comando de impressão será executado para cada linha que ler a partir do ficheiro. No exemplo seguinte veremos como utilizar os blocos de início e fim.

Soma de impressão do valor da coluna

Sintaxe de comando: awk ‘BEGIN {sum=0} {sum=sum+$7} FIM {soma da impressão}’ teste

O exemplo acima imprimirá a soma do valor na 7ª coluna. No bloco de início, a soma variável é atribuída com o valor 0. No bloco seguinte, o valor da 7ª coluna é adicionado à variável soma. Esta adição da 7ª coluna à variável de soma repete-se para cada linha que processou. Quando todas as filas forem processadas, a variável de soma manterá a soma dos valores na 7ª coluna. Este valor é impresso no bloco Fim como mostra abaixo:

# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300

Soma do valor da coluna usando awk script

No 2º exemplo vimos que como SOMAR o valor da coluna 7, da mesma forma em vez de escrevermos numa declaração de uma linha escrevemos como script. Criar um ficheiro sumofcolumn e colar abaixo do script nesse ficheiro

#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}

Executar agora o script usando o comando awk como mostrado abaixo

# awk -f sumofcolumn test300

Esta irá executar o script no ficheiro sumofcolumn e exibir a soma da 7ª coluna no teste.

Linha de string e impressão correspondente

Sintaxe de comando: awk ‘{if($9 == “arkit”) print $0;}’ test

sobre exemplo verificará a string “arkit” na 3ª coluna e se encontrar uma correspondência então imprimirá a linha inteira. A saída deste comando awk está abaixo

# awk '{ if($3 == "arkit") print $0;}' test

Para loop com multiplicação do valor mencionado incrementado por +1

Sintaxe de Comando: awk ‘BEGIN { for(i=1;i<=10;i++) imprimir “Valor multiplicado de”, i, “is”,i*i; }’

Acima do comando imprimirá o multiplicado dos primeiros números de 1 a 10. i+++ adicionará +1 ao número para que este continue a aumentar até 10. A saída do comando está abaixo

# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1

6. Campo de entrada Separador

Você já viu $0,$1,$2… que imprime toda a linha, primeira coluna, segunda coluna… respectivamente. Agora veremos outras variáveis construídas com exemplos.

Como pelo nosso teste de ficheiro de exemplo temos colunas que são separadas por espaço, mas em vez de espaço se tiver qualquer outro símbolo como .i.e. : , – podemos fazer uso delas para separar e imprimir.

Exemplo se tiver : (dois pontos) como separador então use abaixo

awk ‘BEGIN {FS=”:”} {impressão $2}’ teste

OR

awk -F: ‘{impressão $2}’ teste

isto imprimirá a saída como abaixo

# awk -F: '{print $2}' test41 file12

OFS – Output field separator variable

Por defeito sempre que imprimimos os campos utilizando a declaração de impressão os campos são exibidos com carácter de espaço como delimitador. Por exemplo

Sintaxe de comando: awk ‘{print $4,$5}’ test

# awk '{print $4,$5}' testroot 0

Podemos alterar este comportamento padrão usando a variável OFS como

Sintaxe de comando: awk ‘BEGIN {OFS=”:”} {impressão $4,$5}’ test

# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0

Nota: imprimir $4,$5 e imprimir $4$5 não funcionará da mesma forma. A primeira mostra a saída com espaço como delimitador. O segundo exibe a saída sem qualquer delimitador.

NF – Número de campos contados

NF pode ser usado para saber o número de campos em cada linha abaixo é o exemplo de comando

# awk '{print NF}' test9

NR – número de registos de contagem

NR pode ser usado para saber o número de linha ou contagem de linhas num ficheiro

# awk '{print NR}' test12345678910

Acima do exemplo será impresso o número de linha, em ficheiro de teste temos dez linhas.

Imprimir número de registos em ficheiro particular

se vir acima o exemplo da 9ª secção é impresso todos os números de linhas mas o requisito é que eu veja apenas a contagem de registos.

# awk 'END {print NR}' test10

Isto irá mostrar o número total de linhas no ficheiro de teste.

Funções de string em Awk:

Algumas das funções de string em awk são:

  • index(string,search)
  • length(string)
  • split(string,array,separator)
  • li>substr(string,posição)

  • substr(string,posição,max)
  • tolower(string)
  • toupper(string)

Exemplos Avançados:

Filtrar linhas usando a função Awk split

A função awk split divide uma corda numa matriz usando o delimitador.

A sintaxe da função de divisão é
split(string, array, delimitador)

Agora veremos como filtrar as linhas utilizando a função de divisão com um exemplo.

A entrada “advanced.txt” contém os dados no seguinte formato

# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444

Saída requerida: Agora temos de imprimir apenas as linhas em que o 2º campo tem a string “ARKIT” como o 3º campo.

The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222

O comando awk para obter a saída está abaixo mencionado

Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222

Poucos exemplos de comando / ferramenta awk que veremos no próximo post Fica atento.

Palavras-chave: awk scripting no linux,como correr um script awk no linux,como escrever um script awk no linux,awk no linux bash,awk no comando linux,exemplos de scripts awk linux,awk no exemplo linux,awk no linux significa,awk no linux pdf,awk na programação linux,awk em linux ppt,awk em linux shell script,comando awk em linux shell scripting,awk em linux tutorial,awk em terminal linux,awk em terminal linux,awk em linux com exemplos, awk scripting, awk scripting, awk scripting, awk scripting, awk scripting

Excertos para a leitura.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *