#!/bin/bash
myDate=$(date +'%d-%m-%Y')
logPath='/srv/uni/kani/catalog/'
BEGINJOB="PN4949D" # Can set to $1 to accept as 1st arg
ENDJOB="FO1008D" # Can set to $2 to accept as 2nd arg
regexFirst="$myDate.*BEGIN JOB /srv/uni/PROD/PNRUN/$BEGINJOB"
regexLast="$myDate.*END JOB /srv/uni/PROD/PNRUN/$ENDJOB"
# Find First time
FIRST=$(sed -n "/$regexFirst/p" $logPathLogDay.$myDate | head -1)
FIRST=$(echo $FIRST | sed -n 's/.*\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\).*//p')
echo "First job started at $FIRST"
# Find Last time
LAST=$(sed -n "/$regexLast/p" $logPathLogDay.$myDate | tail -1)
LAST=$(echo $LAST | sed -n 's/.*\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\).*//p')
echo "Last job ended at $LAST"
#Compare time
# feeding variables by using read and splitting with IFS
IFS=: read first_hour first_min first_sec <<< "$FIRST"
IFS=: read last_hour last_min last_sec <<< "$LAST"
#
# the 10# is there to avoid errors with leading zeros
# by telling bash that we use base 10
total_hours=$((10#$last_hour - 10#$first_hour))
total_minutes=$((10#$last_min - 10#$first_min))
total_secs=$((10#$last_sec - 10#$first_sec))
echo "Tonight's work took $total_hours hours $total_minutes minutes and $total_secs seconds"
Este script analisará a data atual e procurará pelo arquivo de datas, a primeira ocorrência de BEGIN e a última ocorrência de END e, em seguida, comparará as marcações de hora.
Saída como:
First job started at 19:00:01
Last job ended at 24:00:01
Tonight's work took 5 hours 0 minutes and 0 seconds
Este é um script rápido que eu joguei junto, você pode limpá-lo e modificar a saída, jogá-lo em uma função, se necessário, etc.
* EDIT: Além disso, para executar este script, basta adicionar ao seu crontab para ser executado diariamente no horário que preferir.
** EDIT: eu adicionei as variáveis para o início e fim do regex.
Eu transformei o que parece ser o Job Reference # como variáveis, para que você possa alterá-lo facilmente ou até mesmo passá-lo como argumento.
Por fim, coloco o caminho para o log como uma variável, de modo que possa ser alterado facilmente também.
Como observação, adicionei os comentários no script, embora não sejam os mais detalhados, mas eles estão lá para que você possa seguir o script e fazer alterações para atender às suas necessidades. Como acontece com qualquer script, a personalização pode ser infinita!
Você também pode modificar a data como: myDate=$(date --date="1 day ago" +'%d-%m-%Y')
, se preferir ter essa aparência nos registros do dia anterior.