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: M. Rodrigo Monteiro
Subject: Re: [shell-script] Tempo de execução de um script
Date: Mon, 29 Sep 2008 13:14:33 -0300

Só para dar um retorno...

Consegui uma solução bem rápida (cerca de 1 minuto) com AWK para um
arquivo de log de 400MB.

awk -v ap=\' '
    BEGIN {
        print "insert into squidReport (code, date, duration,
clientAddress, resultCode, bytes, requestMethod, url, rfc931,
hierarchyCode, type) values "
    }
    {
        gsub(ap, "\\"ap, $7) ; print "(\047\047,
from_unixtime(\047"$1"\047), "$2", INET_ATON(\047"$3"\047),
\047"$4"\047, "$5", \047"$6"\047,
substring_index(\047"$7"\047,\047http://\047,-1), \047"$8"\047,
\047"$9"\047, \047"$10"\047), "
    }' access.log.20080906 > insert.sql

frase=$(tail -n 1 insert.sql)
num=$(echo "${frase}" | wc -c)
num=$((num - 3))
frase=$(echo "${frase}" | cut -b -${num})
sed -i '$d' insert.sql
echo "${frase};" >> insert.sql


Desse jeito geraria um arquivo com apenas 1 insert para importar no
MySQL, mas acabei esbarrando em uma limitação no servidor do tamanho
do pacote (max_allowed_packet).
Então decidi fazer com o velho e bom while (apesar de demorar uma
eternidade (em um arquivo de 1MB, demorou 8 minutos). Imagina quando
for rodar em um com 400MB?
Mas, enfim, aqui está o outro script...

while read date duration clientAddress resultCode bytes requestMethod
url rfc931 hierarchyCode type ; do
    url=$(echo "${url}" | awk -F'http://' '{print $2}')
    mysql -usquidReport -psecret -h XXX.XXX.XXX.XXX -D squidReport <
<(echo "insert into squidReport (code, date, duration, clientAddress,
resultCode, bytes, requestMethod, url, rfc931, hierarchyCode, type)
values ('', from_unixtime('${date}'), ${duration},
INET_ATON('${clientAddress}'), \"${resultCode}\", ${bytes},
\"${requestMethod}\", \"${url}\", \"${rfc931}\", \"${hierarchyCode}\",
\"${type}\");")
done < access.log.20080906

Se alguém tiver alguma ideia mirabolante... estou por aqui :)

Abraços e obrigado pela ajuda.


reply via email to

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