Linux Portugal
  Login   -   Registar!   -   Password?
    Novo Mirror Português - CeSIUM  
  Documentação Recente   Últimas Perguntas   Ultimos Posts do Forum
  Emular rato pelo teclado numérico
  Forçar o desmonstar de um dispositivo com estado ocupado (busy)
  Fedora 10 - Instalar o source do Kernel
  Linux numa Pen Drive
  Kanguru Huawei e220 - OpenSUSE 10.2
  Terminal Linux no Windows
  Instalando o Oracle Express Edition 10.2 no Ubuntu Server
  instalar o KDE 4 sob MacOS X
  Bloquear o login aos utilizadores
  slackpkg
  Acertar data e hora
  Carregar o SmartArray (HP ml50 e afins na instalação do fedora)
hardware livre
Arranque
Video
Comunidade !
Ligação de camera por firewire
Usar Xubuntu/Mint numa Pen como se fosse o SLAX
Duvidas na resolução de um trabalho
Brasileiros podem participar do fórum?
Começando no Fórum
Qual a melhor distribuição para uma loja?
Instalação Linux
Instalação de pacotes não confiáveis
ASUS ROG TOURNAMENT - LEAGUE OF LENGENDS & CS: GO
Barbini - [2014-03-03 13:57:49 ]

MEO XLPARTY FIL 2013 - INSCRIÇÕES & TORNEIOS
Barbini - [2013-11-26 11:07:34 ]

O Worten Ultimate Challenge está de volta!
Barbini - [2013-10-30 12:06:30 ]

Olé, um game de drible e gol - jogue grátis
mattpaulo - [2013-07-21 22:54:37 ]

Worten Ultimate Challenge PES 2013 - GT5
Barbini - [2013-06-17 14:11:50 ]

MEO XLPARTY - EXPOCENTRO - POMBAL 2013
Barbini - [2013-06-14 17:16:08 ]

Simplicidade a armadilha do 80/20
mattpaulo - [2013-05-04 20:29:13 ]

Ligar e desligar o PC Remotamente
soneca - [2012-11-02 18:25:02 ]

Add to Google Reader or Homepage   Add to Pageflakes      Add to netvibes   Adicione o artigo ao del.icio.us
Documentação


AWK - Como extrair dados legiveis de dumps, logs e listagens de dados que são regulares
 
Descrição:

Como extrair dados legiveis de dumps, logs e listagens de dados regulares.

Material necessário:

AWK (gawk-3.1.1-9) neste caso
Editor de texto: (vi por exemplo)

Procedimentos de instalação:

1º Efectuem o download do source ou dos binários do gawk
( NOTA: se ja tiverem isto instalado não e necessário mais nada).
2º Instalem (./configure;make;make install) ou (rpm -ivh gwakxxx.rpm). Se tiverem algum problema e so lerem o ficheiro README ou o ficheiro INSTALL no caso de estarem a instalar do código fonte.

Introdução ao awk:

O awk é uma pequena linguagem, que foi projectada para processar formatos de texto regulares. Isto inclui dumps, listagens e resultados de base de dados.

Por exemplo:
Se efectarmos um comando muito simples como por exemplo: ls -l /etc/hosts.* o resultado vai ser o seguinte:

-rw-r--r-- 1 root root 161 Jan 12 2000 /etc/hosts.allow
-rw-r--r-- 1 root root 347 Jan 12 2000 /etc/hosts.deny


Agora imaginem que querem só as permissões e o nome do ficheiro?
Basta fazerem o seguinte comando na linha de comandos,
ls -l /etc/hosts.*|awk '{print $1"\t"$9}'

para se ter os dados desejados no formato de (permissões - 1 tabulação - nome do ficheiro) como se pode ver a seguir.

-rw-r--r-- /etc/hosts.allow
-rw-r--r-- /etc/hosts.deny

O que foi feito foi simplesmente imprimir o 1 e o 9 campo.


Isto foi um exemplo muito simples do que se pode fazer com o awk.

Para exemplificar o poder do awk vai ser demonstrado outro exemplo que pretende analisar um ficheiro de log. Para isso vai ser escrito um pequeno script que vai permitir efectuar essa tarefa.

Esse script para ser devenvolvido tem de ser constituido por 3 partes: um bloco BEGIN, um bloco de código principal e um bloco de finalização.

O script que vai ser feito vai contar o número de reboots de uma determinada maquina. Para isso vai ser analizado o output do comando last, que neste caso é o seguinte:

lbruno pts/3 Thu Nov 6 01:04 - 01:04 (00:00)
lbruno pts/2 217.129.162.79 Thu Nov 6 00:34 - 01:05 (00:30)
hfas pts/1 217.129.162.79 Wed Nov 5 23:58 still logged in
lmdsr pts/0 217.129.162.193 Wed Nov 5 23:51 still logged in
reboot system boot 2.4.20-8 Wed Nov 5 23:50 (01:21)
lmdsr pts/3 217.129.162.193 Wed Nov 5 23:36 - down (00:11)
hfas pts/1 217.129.162.79 Wed Nov 5 22:49 - down (00:58)
lbruno pts/0 217.129.162.79 Wed Nov 5 22:47 - down (01:00)
nmmm pts/1 217.129.162.15 Wed Nov 5 22:17 - 22:18 (00:01)
sergiol pts/0 192.168.130.64 Wed Nov 5 20:23 - 22:38 (02:15)
lbruno pts/0 192.168.100.56 Wed Nov 5 20:05 - 20:15 (00:10)
lbruno pts/0 192.168.100.56 Wed Nov 5 19:58 - 19:59 (00:00)
lbruno pts/0 192.168.100.56 Wed Nov 5 19:56 - 19:58 (00:02)
hfas pts/1 192.168.100.54 Wed Nov 5 19:30 - 19:40 (00:09)
scripter pts/3 a213-22-50-53.ne Wed Nov 5 19:24 - 23:13 (03:48)
hfas pts/1 192.168.100.54 Wed Nov 5 19:19 - 19:25 (00:05)
lmdsr pts/0 192.168.100.55 Wed Nov 5 19:19 - 19:43 (00:24)
lmdsr pts/3 192.168.100.51 Wed Nov 5 18:52 - 19:14 (00:21)
root tty2 Wed Nov 5 18:14 - 19:26 (01:11)
admin pts/2 192.168.100.51 Wed Nov 5 17:43 - 19:14 (01:31)
root pts/0 192.168.100.51 Wed Nov 5 17:36 - 19:14 (01:37)
root tty1 Wed Nov 5 16:16 - down (07:32)
root tty1 Wed Nov 5 16:14 - 16:15 (00:00)
reboot system boot 2.4.20-8 Wed Nov 5 16:14 (07:33)


o nome do ficheiro editado no vi foi contador_reboots e o código deste ficheiro é o seguinte:

#!/usr/bin/awk -f
BEGIN {
print "Contador de reboots do sistema"
reboot=0
}
{
if($2=="system") {
printf "Reboot aconteceu em: " $7 " - " $6 " às " $8 "\n"
reboot=reboot+1
}
}
END {
print "--------------------------------------------------------"
printf ("\nTotal de reboots efectuados a maquina: %d", reboot)
printf ("\nTotal de linhas analisadas: %d\n", NR)
}


O que este script faz e simplesmente ler a coluna 2 do output do comando last, e se este for igual a system então este conta e mostra uma simples mensagem. No pedaço de código terminal e efectuada uma pequena estatistica a indicar o número de registos analisado, através da váriavel NR que nos indica quando linhas foram processadas e é mostrado o número de registos (reboots) através da variável que está sempre a ser incrementada quendo respeita o if (reboot).

o produto final da passagem do output original do last pelo ficheiro contador_reboots vai ser o seguinte:

[lmdsr@gaesi lmdsr]# last|./contador_reboots
Contador de reboots do sistema
Reboot aconteceu em: 5 - Nov às 23:50
Reboot aconteceu em: 5 - Nov às 16:14
--------------------------------------------------------

Total de reboots efectuados a maquina: 2
Total de linhas analisadas: 26


Como podem ver, aqui está demonstrado um pouco do poder do awk.

Geralmente o caracter separador das colunas é o espaço (32) mas também pode ser definido outro. Para tal e necessário faze-lo no bloco BEGIN, como está demonstrado a serguir, onde vai ser definido o caracter de separação de colunas ":".

#!/usr/bin/awk -f
BEGIN { FS=":" }
{
#CODIGO
}


Outro exemplo e gerar números binarios aleatóriamente, usando para isso expressões de ciclo.A função rand() devolve números entre 0 e 1. Com o exemplo a seguir vão ser gerados 10 números entre 0 e 1.

#!/usr/bin/awk -f
BEGIN {
srand();
}
{
for(i=1;i<=10;i++)
print rand(); exit

}


Por fim, nesta introdução vou mostrar como usar expressões regulares básicas.
Por exemplo para analisar o mesmo comando e determinar todos os utilizadores que efectuaram o login na máquina e saber de onde vieram (IP) basta efectuar o seguinte comando na bash.

last|awk '{if(($3 ~ /192/)) {printf "Utilizador " $1 " efectou o login vindo de " $3"\n"}}'

e o resultado será o seguinte dado o last que foi apresentado atrás.

Utilizador sergiol efectou o login vindo de 192.168.130.64
Utilizador lbruno efectou o login vindo de 192.168.100.56
Utilizador lbruno efectou o login vindo de 192.168.100.56
Utilizador lbruno efectou o login vindo de 192.168.100.56
Utilizador hfas efectou o login vindo de 192.168.100.54
Utilizador hfas efectou o login vindo de 192.168.100.54
Utilizador lmdsr efectou o login vindo de 192.168.100.55
Utilizador lmdsr efectou o login vindo de 192.168.100.51
Utilizador admin efectou o login vindo de 192.168.100.51
Utilizador root efectou o login vindo de 192.168.100.51


Espero que tenham visto por estes exemplos uma utilidade nesta ferramenta, como eu vi, pois sou administrador de sistemas e vi aqui uma forte ferramenta de análise dos ficheiros de log do sistema.

Esta documentação não dispensa o manual da ferramenta pois aqui so mostrei opções básicas que podem ser feitas.


 


Escrito por: Luis RodriguesTestado em: REDHAT( 9.0 )



Voltar atrás

Endereço de email:


Linux Portugal RSS




    Revista Espirito Livre
    Fedora Release
    Ubuntu Release
Desenvolvido pela equipa GNU/Linux Portugal (2005)
Ver código da página
AWK - Como extrair dados legiveis de dumps, logs e listagens de dados que são regulares - Linux Portugal