shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Expressão Regular para formatar log


From: andelnyr
Subject: Expressão Regular para formatar log
Date: Thu, 23 Sep 2010 20:05:53 -0000
User-agent: eGroups-EW/0.82

Prezados

Um determinado equipamento que trabalho produz um log enorme durante o seu 
funcionamento. O formato é:

dia_da_semana mês dia_do_mês 00:00:00 ano
c dado_de_controle1 dado_de_controle2
titulo_coluna1
titulo_coluna2
titulo_coluna3
.
.
.
titulo_coluna145
h 00:00:00
valor_coluna1
valor_coluna2
valor_coluna3
.
.
.
valor_coluna145
h 00:05:00
valor_coluna1
valor_coluna2
valor_coluna3
.
.
.
valor_coluna145
h 00:10:00
.
.
.

Ou seja o equipamento colhe valores do sistema de 5 em 5 minutos e o que eu 
desejo fazer é transformar este log de quase 50000 linhas em um arquivo assim

HORA titulo1 titulo2 tirulo3... titulo145
00:00:00 valor1 valor2 valor3… valor145
00:05:00 valor1 valor2 valor3... valor 145
00:10:00 valor1 valor2 valor3... valor 145
.
.
.
23:55:00 valor1 valor2 valor3... valor 145

O que eu já fiz:

Em primeiro lugar tentei identificar os caracteres separadores e além do "new 
line" no final de cada linha encontrei de 1 a 7 espaços e em alguns casos o TAB 
no começo da linha de cada título, pois seja la quem foi que bolou esta 
formatação alinhou os nomes "pela direita".

O script ficou:

#!/bin/bash
tmp=( $(cat "$1" | tr "*" "&") ) #troquei o "*" por "&" para não dar erros!
echo "${tmp[*]}" > vetor.log

#FAZER LINHA TITULOS
echo "HORA $(cat vetor.log | cut -d " " -f9-154)" > bd.log

#FAZER LINHA DE VALORES
for n in $(seq 154 148 42630)
do
inicio=$(expr "$n" + 2)
fim=$(expr "$n" + 148)
cat vetor.log | cut -d " " -f$inicio-$fim >> bd.log
done

ok – funcionou e já utilizo os logs para as aplicações que necessito. Agora com 
calma estou querendo entender como usar expressões regulares para realizar a 
mesma ação, mas as minhas tentativas foram infrutíferas. Peço aos participantes 
mais experientes alguma dica, por onde começar.

Desde já agradeço.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]