![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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:
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:
|
|
||||
|
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 |
|
||||
|
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. |
|
||||
|
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 |
![]() |
| Marcadores |
| Tags |
| bash, grep, sed |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|