The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
grep'ing um arquivo até uma determinada mensagem aparece pallak7 Programação Shell Script e 3 04-23-2009 12:48
grep'ing específica para os diretórios, e usando a saída para mover arquivos JayC89 Programação Shell Script e 1 12-06-2008 03:37
Acelerar uma Shell Script (find, grep e um de loop) Dave Stockdale UNIX para Dummies Perguntas & Respostas 8 08-11-2008 05:36
Acelerar o processamento de um arquivo dlam Programação Shell Script e 4 07-19-2008 01:47
acelerar a compilação em Sun Solaris ambiente swamymns Programação Shell Script e 2 07-12-2006 01:06

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Usuário
  
 

Join Data: dezembro 2008
Posts: 8
Question grep'ing e sed'ing bash em pedaços ... precisam de ajuda para acelerar um log analisador.

Eu tenho um arquivo que é de 20 - 80 + MB de tamanho que é um determinado tipo de arquivo de log.

Ele registra um dos nossos processos e este processo é multi-threaded. Assim, o arquivo de log é um tipo de confusão. Aqui está um exemplo:

O logfile algo parecido com: "DATA HORA - Thread ID - Detalhes", e um novo arquivo é criado para cada dia
Citação:
20090409 000122 - BD0 - Ordem 123 iniciando sessão
20090409 000122 - BD0 - Tratamento 1
20090409 000122 - BD0 - Mais Processamento
20090409 000123 - EF0 - Ordem 234 iniciando sessão
20090409 000124 - EF0 - Transformação
20090409 000124 - BD0 - Tratamento 2
20090409 000125 - BD0 - Mais Processamento
20090409 000125 - EF0 - Transformação
20090409 000125 - DD1 - Cancelar 345 iniciando sessão
20090409 000125 - DD1 - Transformação
20090409 000126 - DD1 - Tratamento 2
20090409 000126 - BD0 - Ordem 123 desligando
20090409 000127 - 11F - Consulta 543 iniciar sessão
20090409 000127 - 11F - Transformação
..
..
20090409 000135 - 11F - Consulta 543 desligando
..
20090409 000140 - EF0 - Ordem 234 desligando
..
..
..
20090409 000143 - DD1 - Cancelar 345 desligando
Agora, aqui é onde fica a ser uma dor ... Eu preciso tirar as linhas de "Iniciar sessão" para "Terminar Sessão" para cada Thread ID, e despejar a estes ficheiros separados. No entanto, o Thread ID pode ser duplicada ao longo de um dia - mas geralmente não por muitas horas.

Uma sessão pode durar de 30 segundos a 4 minutos ou mais (~ 1200 linhas) no logfile, e pode haver até 20 sessões simultâneas.

Agora, tenho algo que funciona - embora muito lentamente. Eu acabar grepping e sedding o arquivo mais e mais. Quando o arquivo ficar grande, ela tem uma enorme quantidade de tempo. Estou esperando que alguém aqui pode me ajudar a otimizar isso. Se possível, gostaria de usar bash.

Obrigado,
Eric

Aqui é o código que tenho que funciona, mas é _slow_


Código:
    if [[ -e "$log_file" ]]
    then
        echo "parsing: "$log_file
        grep "starting session" $log_file | while read line 
        do
            thread=`echo $line | cut -d' ' -f4`
            sessiontype=`echo $line | cut -d' ' -f6`
            sessionnumber=`echo $line | cut -d' ' -f7`

            echo "  first line of session: "${line:0:25}"..."
            line2=`echo  - $thread - $sessiontype $sessionnumber shutting down`
            echo "  last line of session: "${line2:0:25}"..."
            sed -n "/$line/,/$line2/p" $log_file | grep " - $thread - ">session.$thread.$sessiontype.$sessionnumber
        done
    ....

Isto dá-me um número de arquivos, que usando o exemplo acima seria log criados como mostrado abaixo:
Citação:
dossier: session.BD0.Order.123
20090409 000122 - BD0 - Ordem 123 iniciando sessão
20090409 000122 - BD0 - Tratamento 1
20090409 000122 - BD0 - Mais Processamento
20090409 000124 - BD0 - Tratamento 2
20090409 000125 - BD0 - Mais Processamento
20090409 000126 - BD0 - Ordem 123 desligando

dossier: session.DD1.Cancel.345
20090409 000125 - DD1 - Cancelar 345 iniciando sessão
20090409 000125 - DD1 - Transformação
20090409 000126 - DD1 - Tratamento 2
..
..
..
20090409 000143 - DD1 - Cancelar 345 desligando

dossier: session.11F.Query.543
20090409 000127 - 11F - Consulta 543 iniciar sessão
20090409 000127 - 11F - Transformação
..
..
20090409 000135 - 11F - Consulta 543 desligando

dossier: session.EF0.Order.234
20090409 000123 - EF0 - Ordem 234 iniciando sessão
20090409 000124 - EF0 - Transformação
20090409 000125 - EF0 - Transformação
20090409 000140 - EF0 - Ordem 234 desligando
  #2 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is online now Forum Staff  
Moderador
  
 

Join Date: Feb 2007
Mensagens: 4.333
Assumindo que a primeira linha de uma sessão termina com "iniciar sessão", você pode tentar isso (não testado):


Código:
awk '{
  !a[$4]{a[$4]=$4; n[$4]="session."$4"."$6"."$7}
  a[$4]{print > n[$4]}
' file

Utilize nawk / ou usr/xpg4/bin/awk no Solaris, se você obter erros.

Atenciosamente
  #3 (permalink)  
Old 04-21-2009
elinenbe elinenbe is offline
Usuário
  
 

Join Data: dezembro 2008
Posts: 8
Desculpe, eu deveria ter sido mais específico. A todas as linhas iniciando sessão terminará com algo como:

20090409 000122 - BD0 - Ordem 123 iniciando sessão com cliente 12 porto 34
20090409 000123 - EF0 - Ordem 234 iniciando sessão com 347 cliente porto 38
...

E tanto o cliente eo porto são dinâmicos valores.

Sim, eu estou recebendo erros - Estou executando este título cygwin, então não tenho acesso fácil a nawk.
  #4 (permalink)  
Old 04-21-2009
devtakh devtakh is offline
Usuário
  
 

Join Date: Oct 2007
Local: Bangalore
Lugares: 514
tente isso --
$ Sort-k 4 logfile | awk 'NR \u003d\u003d 1 (prev \u003d $ 4; txt \u003d "sessão." $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); getliine) (if (prev! ~ $ 4) (txt \u003d "sessão." $ 4 "." $ 6 "." $ 7; printf ( "% s \ n% s", txt, $ 0); prev \u003d $ 4) else (print $ 0; prev \u003d $ 4)) '

vai dar algo parecido com isto --

session.11F.Processing.
20090409 000127 - 11F - Processing20090409 000127 - 11F - Transformação
20090409 000127 - 11F - Consulta 543 iniciar sessão
session.BD0.More.Processing
20090409 000122 - BD0 - Mais Processing20090409 000125 - BD0 - Mais Processamento
20090409 000126 - BD0 - Ordem 123 desligando
20090409 000122 - BD0 - Ordem 123 iniciando sessão
20090409 000122 - BD0 - Tratamento 1
20090409 000124 - BD0 - Tratamento 2
session.DD1.Cancel.345
20090409 000125 - DD1 - Cancelar 345 começando session20090409 000125 - DD1 - Transformação
20090409 000126 - DD1 - Tratamento 2
session.EF0.Order.234
20090409 000123 - EF0 - Ordem 234 começando session20090409 000124 - EF0 - Transformação
20090409 000125 - EF0 - Transformação


felicidades,
Devaraj Takhellambam
  #5 (permalink)  
Old 04-21-2009
Franklin52 Franklin52 is online now Forum Staff  
Moderador
  
 

Join Date: Feb 2007
Mensagens: 4.333
Experimente um presente:


Código:
awk '
{if !($4 in a){a[$4]=$4; n[$4]="session."$4"."$6"."$7}}
{if ($4 in a) {print > n[$4]}}
' file

Atenciosamente
Closed Thread

Marcadores

Tags
bash, grep, sed

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 09:10.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0