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)
- substr(string,posição,max)
- tolower(string)
- toupper(string)
li>substr(string,posição)
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.