if you have not yet started on this project or looking at a brick wall, here is a quick breakdown of what needs to happen ...
A. grab entries from the log in 5 minute increments for each hour for each day
B. sort entries according to categories
C. create and format report
i suspect that you are getting stuck with item A so here's something to help you out ... i did it using ksh in solaris 10 so you may need to modify it according to the shell you need to use and the OS you are working in ... you still need to include the parts for items B and C but that should be easier to do ... the script may run faster using perl, python or ruby so feel free to use and modify ... be sure to test in safe place before running in production area ...
btw, "`< $tmpfile`" construct does not work in some shells so use "`cat $tmpfile`" instead ...
anyways, good luck!
#! /bin/ksh
list=/tmp/999
tmpfile=/tmp/444".tmp"
tmpdate=/tmp/444".date"
tmphour=/tmp/444".hour"
tmpatt=/tmp/444".att"
tmpok=/tmp/444".ok"
tmpno=/tmp/444".no"
grabentry(){
start=$1
end=$2
while [ $start -le $end ]
do
eval "awk '\$1 ~ /$date/ && \$2 ~ /$hour:$start:/ {print \$0}'" $list
start=`expr $start + 1`
if [ $start -lt 10 ]
then
start=0$start
fi
done
}
rm /tmp/444.* 2> /dev/null
##
## uncomment next 7 lines if script performance slows
#awk -F" " '{print $1 | "sort -u"}' $list > $tmpdate
#awk -F" " '{print $2}' $list | awk -F":" '{print $1 | "sort -u"}' > $tmphour
#
#for date in `< $tmpdate`
#do
# for hour in `< $tmphour`
# do
for date in `awk -F" " '{print $1 | "sort -u"}' $list` #<--| comment out if above 7 lines are uncommented
do #<--|
for hour in `awk -F" " '{print $2}' $list | awk -F":" '{print $1 | "sort -u"}'` #<--|
do #<--|
end=4
while [ $end -le 59 ]
do
if [ $end -lt 10 -a $end -ne 00 ]
then
end=0$end
fi
start=`expr $end - 4`
if [ $start -eq 0 ]
then
start=00
fi
if [ $start -lt 10 -a $start -ne 00 ]
then
start=0$start
fi
grabentry $start $end | awk 'NF > 0' > $tmpfile.$date.$hour.$end
if [ ! -s $tmpfile.$date.$hour.$end ]
then
rm $tmpfile.$date.$hour.$end 2> /dev/null
else
echo "-- cutoff time is $date $hour.$end --" ## echo line used for debugging, can be removed
cat $tmpfile.$date.$hour.$end ## replace this line with code to process, create and format report
fi
end=`expr $end + 5`
done
done
done
exit 0
Monitor Success
Server name = Abidamaru
-------------------------------------------------------------------------------------------------------------------------
DATE TIME ATTEMP SUCCESS FAIL
02-01-2012 TIME 48 46 2
02-01-2012 TIME 91 88 3
02-01-2012 TIME 55 53 2
02-01-2012 TIME 25 25 0
02-01-2012 TIME 38 36 2
02-01-2012 TIME 67 66 1
02-01-2012 TIME 48 46 2
I have a problem, it displays real time.
And display the date and time. I wanted it to come out in this format.
DATE TIME
2012-01-04 00:50:00
2012-01-04 01:00:00
2012-01-04 01:10:00
1st, your desired output is in 10 minute increments ...
2nd, just replace the actual time with the cutoff time increment (i.e., 00:50:00 replaces 00:49:54,245) when formatting the report ... you should be able to use awk with this matter ...