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

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

Re: [shell-script] Tempo de execução de um script


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Tempo de execução de um script
Date: Fri, 26 Sep 2008 15:12:21 -0300

2008/9/26 M. Rodrigo Monteiro <address@hidden>

> 2008/9/26 Fabiano Caixeta Duarte <address@hidden>:
> > 2008/9/26 M. Rodrigo Monteiro <address@hidden>
> >
> >> Senhores, bom dia.
> >>
> >> Tenho o seguinte script:
> >>
> >> #!/bin/bash
> >>
> >> log="${1}"
> >>
> >> while read line ; do
> >> date=$(echo "${line}" | awk '{print $1}' | cut -d'.' -f1 | perl
> >> -pe 's/\d+/localtime($&)/e')
> >> date=$(date -d "${date}" +"%F %T")
> >> duration=$(echo "${line}" | awk '{print $2}')
> >> clientAddress=$(echo "${line}" | awk '{print $3}')
> >> resultCode=$(echo "${line}" | awk '{print $4}')
> >> bytes=$(echo "${line}" | awk '{print $5}')
> >> requestMethod=$(echo "${line}" | awk '{print $6}')
> >> url=$(echo "${line}" | awk '{print $7}' | awk -F'http://' '{print $2}')
> >> rfc931=$(echo "${line}" | awk '{print $8}')
> >> hierarchyCode=$(echo "${line}" | awk '{print $9}')
> >> type=$(echo "${line}" | awk '{print $10}')
> >> echo "insert into squidReport (code, date, duration,
> >> clientAddress, resultCode, bytes, requestMethod, url, rfc931,
> >> hierarchyCode, type) values ('', \"${date}\", ${duration},
> >> INET_ATON('${clientAddress}'), \"${resultCode}\", ${bytes},
> >> \"${requestMethod}\", \"${url}\", \"${rfc931}\", \"${hierarchyCode}\",
> >> \"${type}\");"
> >> done < "${log}"
> >>
> >>
> >> Eu sei que essa não é nem de longe a melhor forma de fazer isso, por
> >> isso quero a ajuda dos senhores para que eu possa ter o mesmo
> >> resultado desse script, só mais rápido.
> >> Coloquei esse script para executar em um arquivo de log do Squid (400
> >> MB, com 1656966 linhas), aí já viu né... passou a noite toda rodando e
> >> não terminou.
> >>
> >> Tentei fazer direto no AWK, mas não tive sucesso. Parei no seguinte
> erro:
> >> awk: lin. de com.:2: (FILENAME=- FNR=7648) fatal: impossível abrir
> >> pipe `date -d'Wed Sep 24 07:42:04 2008' +'%F %T'' (Muitos arquivos
> >> abertos)
> >>
> >> Abraços,
> >>
> >>
> >> M. Rodrigo Monteiro
> >> address@hidden
> >> "Free as in Freedom, not free as in free beer"
> >> Linux User # 403730
> >>
> >
> > Mister M,
> >
> > Faço duas sugestões:
> >
> > 1) O formato de saída pode ser um formato aceito pelo seu banco para
> > importação ao invés de precisar gerar tantos inserts.
> > 2) Dispense o perl na conversão de timestamp para data. Você pode usar
> > somente o date para isto. Veja um exemplo:
> >
> > date -d @$(head -1 access.log | awk '{print $1}') +"%F %T"
>
> Não sabia que poderia ser feito desse jeito... interessante. Só não
> entendi o @...?


Retirado de info date:

 If you precede a number with `@', it represents an internal time stamp
as a count of seconds.  The number can contain an internal decimal
point (either `.' or `,'); any excess precision not supported by the
internal representation is truncated toward minus infinity.  Such a
number cannot be combined with any other date item, as it specifies a
complete time stamp.

O resto é só a concatenação do caracter @ com o retorno da substituição de
comando.

-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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