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

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

controle de uso de tempo em shell


From: Gustavo Adolfo Kellermann
Subject: controle de uso de tempo em shell
Date: Wed, 11 Jun 2003 17:48:08 -0300

Desculpem a mensagem meio longa, mas eu achei que esse seria um exemplo
interessante para a lista.

No calculo do tempo, eu mostro um uso do awk que para mim eh muito util.
Por exemplo, para somar o tamanho dos arquivos .sh de um diretorio:

ls -l *.sh | awk '{soma += $5}; END {print soma}'

Na minha empresa agora os funcionarios tem de reportar o tempo gasto em
cada tarefa, na forma do percentual gasto durante um dia de trabalho. Tem
gente que estah utilizando um programinha windows para marcar o tempo
gasto, mas eu preferi fazer minha versao em shell, ficou bem simples, e
funciona. A diferenca eh que para indicar que iniciei ou comecei uma
tarefa tenho de executa um comando ao inves de apertar um botao :-)

Bom, aqui vai um breve manual:
./start.sh <tarefa>
marca o inicio da tarefa.

./end.sh
marca o fim da ultima tarefa.

./calc.sh
calcula a porcentagem gasta em cada tarefa, no final do dia.
Pode ser utilizado para uma data no passado, se essa for entrada no
formato <ano><mes><dia>, como 20030609


Coloquei no mail os arquivos por nao serem muito grandes, mas eu preferia
fazer um .tgz deles. Eu posso enviar anexos para a lista, ou
disponibilizar no arquivo do grupo?

start.sh:
if [ -z "$1" ] ; then
        echo "uso: $0 <tarefa>"
        exit
fi

echo `date +%Y%m%d.%H%M%S\ %s` START $1 >> task_control


end.sh:
last_start=`grep START task_control | tail -1 | awk '{print $4}'`

echo `date +%Y%m%d.%H%M%S\ %s` END $last_start >> task_control


calc.sh:
if [ ! -z "$1" ] ; then
        DATE=$1
else
        DATE=`date +%Y%m%d`
fi

START=`grep ^$DATE task_control | head -1 | awk '{print $2}'`
END=`grep ^$DATE task_control | tail -1 | awk '{print $2}'`

if [ -z "$END" -o -z "$START" ] ; then
        echo "Dados insuficientes nesta data - $DATE"
        exit
fi

TOTAL=`expr $END - $START`

grep ^$DATE task_control | awk -v totalgeral=$TOTAL '
/START/ {
        last=$2;
        start=1;
}
/END/ {
        if(start) {
                somas[$4] += $2 - last;
                total += $2 - last;
                start = 0;
        }
}
END {
        print "tarefa              c/ tempo livre    s/ tempo livre"
        for(task in somas) {
                printf("%-20s%2d%%              
%2d%%\n",task,(somas[task] / totalgeral) * 100, (somas[task] / total) *
100)
         }
}'




-- 
**************************
Gustavo Adolfo Kellermann
address@hidden
Terra Networks Brasil S.A.
**************************


reply via email to

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