计算两个日期之间的天数的思路都是:先转换成时间戳,然后计算两个日期之间相差的秒数,再转换成天数。由于aix ksh无法使用date +%s -d ''进行时间戳转换,一番搜索之后,找到了一段代码可以实现ksh下的时间戳转换,特记录备用。虽不明所以,但测试可用。如有明白的达人,望赐教一二。
date2seconds()
{
echo "$*" | awk '{
z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
j=j*86400+$4*3600+$5*60+$6
print j
}'
}
格式:date2seconds 2011 08 07 00 00 00
领导要求写一段shell代码for aix,查看文件系统空间增长情况,假定文件系统都是线形增长(非线性增长,设置阀值报警即可)。写的时候,需要计算两个日期直接的天数,利用了上面这段代码。记录之。
文件系统大小定时采集:
date=`date +%Y%m%d`
df -kv|sed 1d>tmp.size
while read dirsize
do
echo `echo $dirsize|awk '{print $NF, $3 }'` $date >>file.size
done rm -rf tmp.size
文件系统空间增长计算:
#!/usr/bin/ksh
#set -x
getdays()
{
arg1="`echo "$1"|awk '{print substr($1,0,4),substr($1,5,2),substr($1,7,2)}'` 00 00 00"
arg2="`echo "$2"|awk '{print substr($1,0,4),substr($1,5,2),substr($1,7,2)}'` 00 00 00"
stseconds=`date2seconds $arg1`
edseconds=`date2seconds $arg2`
echo "$stseconds $edseconds"|awk '{print ($2-$1)/86400 }'
}
date2seconds()
{
echo "$*" | awk '{
z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
j=j*86400+$4*3600+$5*60+$6
print j
}'
}
awk '{print $1}' file.size|sort|uniq >tmp.dir
while read dir
do
grep -w $dir file.size|sort +2 -3>tmp.tmp
stsize=`head -1 tmp.tmp|awk '{print $2}'`
stdate=`head -1 tmp.tmp|awk '{print $3}'`
edsize=`tail -1 tmp.tmp|awk '{print $2}'`
eddate=`tail -1 tmp.tmp|awk '{print $3}'`
#echo "start date:$stdate,end date:$eddate,stsize:$stsize,edsize:$edsize\n"
days=`getdays $stdate $eddate`
#echo "days:$days\n"
size=`echo "$stsize $edsize"|awk '{print $2-$1}'`
#echo "size:$size\n"
daysize=`echo "$size $days"|awk '{print $1/$2}'`
monsize=`echo "$daysize"|awk '{print ($1*30)/(1024*1024)}'`
echo "From \033[32m $stdate \033[0m to \033[32m $eddate \033[0m,\033[33m $dir \033[0m increase\033[31m $size K \033[0m in \033[33m $days days \033[0m,Average \033[35m daily \033[0m increase of \033[31m $daysize K \033[0m,Average \033[35m monthly \033[0m increase of\033[31m $monsize G \033[0m"
done
rm -rf tmp.dir
rm -rf tmp.tmp
阅读(8884) | 评论(0) | 转发(0) |