Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92145963
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 22:38:09

作者:styr  出处:Unix爱好者家园unix-cd.com  


现在的统版系统中,每天有一张"邮政储蓄营业轧帐单",显示了每天的存取交易量,但如果想得到一个月或更多的每天或合计交易量,好像就没办法查了,只能手工汇总统计,现在做了个shell,可以显示指定网点指定月份的交易量和合计,前提是每天的报表已是正确下载,并且在前置机print未删除这些报表.

该shell现限制为能由统版用户执行,生成的统版报表为存放于统版/print/机构号/机构号.log

shell现在的统版用户名为四川的scabs,报表目录为/usr/scabs/print,如各位有所不同,请自行修改.^_^

现在还在考虑加入表格每列竖线功能,使之能成为一张真正的表格,但现在每行的记录字段值设的比较大,如业务笔数至少就要占5位数(万笔),金额至少也要12位,那如果每列再加入竖线,这时在有压缩功能的打印机打印出来是正常的,但由于某些终端显示列数的限制(如我现在的NL-3000每屏只能显示80列),在终端运行该shell查看时报表会挪位........有的终端就可以调整列数,如NL-320....那显示就应该对的吧,不过没试过....

#!/bin/ksh
#查询统计交易量的shell V050810
#乐山市沙湾区邮政局  宋 涛
#改进生成表格每行横线 V050810
#改进生成表格每行标准横线 V050810
#增加表末显示统计功能 V050811
#改进表末统计结果显示小数位的问题 V050812
#增加在命令行使用参数$1,$2及简单帮助 V050812
#增加判断当无报表文件时的出错处理 V050812
#终于加入了表格竖线,但在终端显示不完全 :-(  v050812
#改进了表格文件的存盘文件名,改进了月份输入及判断的bug,改进了出错后的显示问题,增加了选择打印功能 V050813
#改进了检测vmore的处理,增加统计平均数,修正了表格显示问题 V050817

trap 'tput sgr0  rm ${printdir}temp.log 2>/dev/null; echo  ' 0 1 2 3 9 15
clear
tput bold

test "$LOGNAME" != "scabs" && { tput bel  echo "\033[05m" "\n\n   Sorry ! 本 程 序 只 能 由 scabs 用 户 执 行 !\n\n"  \
tput sgr0  exit 0  }

jg=$1
mm=$2

if [ "$jg" = "-h" ]
then 
tput bel 
echo '\n                 查询统计交易量\n'
echo "  调用格式:" `basename $0` "[ 机构号 ] [ 月份 ] \n"   
echo '  机构号: 9位机构代码, -h 为帮助 ,q 或 Q 为退出\n'
echo '  月份: 1或2位查询统计的月份,回车则默认为当月月份,q 或 Q 为退出\n'
echo '  \n\n  注:  以上参数均为可选参数,作用是快捷操作,如无参数,则在程序中进行输入\n'  
exit 0
fi

while :
do 
tput cup 3 5
test "$jg" = ""  && { echo "           查 询 统 计 交 易 量 \n"  \
echo -n "\n   请输入欲查询统计的机构号(输入为 q 为退出):   \c"  read jg  }
test "$jg" = "q" -o "jg" = "Q" && exit 0  
printdir="/usr/scabs/print/"
if [ -d $printdir$jg ]
then
break 
else 
echo "\n          $jg 该机构目录不存在 \n"  read  jg=  tput cup 4 0
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
continue
fi
done 

while :
do 
tput cup 8
test "$mm" = "" && { echo -n "   请输入欲查询统计的月份(输入为   q 为退出):   \c"  read mm  }
test "$mm" = "q" -o "$mm" = "Q" && exit 0
test "$mm" = "" && { mm=`date +%m`  break  }
if [ `expr $mm : "^[0-9][0-9]*$"` -gt 0 ]
then
:
else
echo "\n          $mm 月份必须为数值\n"  read  mm=  tput cup 8 0
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
continue
fi
if [ "$mm" -gt 0 -a "$mm" -le 12 ]
then 
test `expr length $mm` -eq 1 && mm=`printf "%01d"$mm`   break 
else 
echo "\n          $mm 月份输入错误\n"  read  mm= tput cup 8 0
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
echo "                                                                                              "
continue
fi
done 


cd $printdir$jg

fn=`ls rpt_Mnacc_001${jg}${mm}*.dat 2>/dev/null`
test "$fn" = "" && { echo "\n          未找到 $mm 月的报表文件 !\n "  exit 0  }
fn=`echo $fn|awk '{print $1}'`
dmjg=`tr "|" '\n'<$fn |sed -n '1p;2p'`
echo "\n                            查 询 统 计 交 易 量 表\n"  >${printdir}${jg}/${jg}${mm}.log
echo $dmjg | awk '{printf("%10s%9s%12s%s\n"),"机构号: ",$1,"网点名称: ",$2}' >>${printdir}${jg}/${jg}${mm}.log
echo "┌─────────────────┬──────────────┬─────────────┐" >>${printdir}${jg}/${jg}${mm}.log
echo "│ 存入 │ 支取 │ 结余 │" | awk '{printf("%s%21s%15s%15s%15s%13s%15s\n",$1,$2,$3,$4,$5,$6,$7)}' >>${printdir}${jg}/${jg}${mm}.log
echo "├──┬───┬───┬──────┼───┬───┬──────┼────┬────────┤" >>${printdir}${jg}/${jg}${mm}.log
echo "│ 日期 │ 笔数 │ 续存 │ 金额 │ 销户 │ 支取 │ 金额 │ 户数 │ 余额 │" \
| awk '{printf("%s%2s%s%6s%s%6s%s%12s%s%6s%s%6s%s%12s%s%8s%s%16s%s\n"),$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19}'\
>>${printdir}${jg}/${jg}${mm}.log
>${printdir}temp.log

for fn in `ls rpt_Mnacc_001${jg}${mm}*.dat`
do
rq=`echo $fn|cut -c23-26`
mx=`tr "|" '\n' <$fn |sed -n '312p;313p;;314p;315p;316p;317p;320p;321p'`
echo $mx >> ${printdir}temp.log
echo "├──┼───┼───┼──────┼───┼───┼──────┼────┼────────┤" >>${printdir}${jg}/${jg}${mm}.log
echo ""  $rq  $mx "" \
|awk '{printf("%s%2s%s%6d%s%6d%s%12.2f%s%6d%s%6d%s%12.2f%s%8d%s%16.2f%s\n"),$1,$2,"",$3,"",$4,"",$5,"",$6,"",$7,"",$8,"",$9,"",$10,$11}' >>${printdir}${jg}/${jg}${mm}.log
done
echo "├──┼───┼───┼──────┼───┼───┼──────┼────┼────────┤" >>${printdir}${jg}/${jg}${mm}.log
sum=`awk '{a+=$1} {b+=$2} {c+=$3} {d+=$4} {e+=$5} {f+=$6} {g+=$7} {i+=$8} END{printf("%6d%6d%12.2f%6d%6d%12.2f%8d%16.2f%4d"),a,b,c,d,e,f,g,i,NR}' ${printdir}temp.log`
avg=`echo $sum| awk '{printf("%6d%6d%12.2f%6d%6d%12.2f%8d%16.2f%"),$1/$9,$2/$9,$3/$9,$4/$9,$5/$9,$6/$9,$7/$9,$8/$9}'`
echo $avg |awk '{printf("%s%2s%s%6d%s%6d%s%12.2f%s%6d%s%6d%s%12.2f%s%8d%s%16.2f%s\n"),"","平均","",$1,"",$2,"",$3,"",$4,"",$5,"",$6,"",$7,"",$8,""}' >> ${printdir}${jg}/${jg}${mm}.log
echo "├──┼───┼───┼──────┼───┼───┼──────┼────┼────────┤" >>${printdir}${jg}/${jg}${mm}.log
echo $sum |awk '{printf("%s%2s%s%6d%s%6d%s%12.2f%s%6d%s%6d%s%12.2f%s%8d%s%16.2f%s\n"),"","汇总","",$1,"",$2,"",$3,"",$4,"",$5,"",$6,"",$7,"",$8,""}' >> ${printdir}${jg}/${jg}${mm}.log
echo "└──┴───┴───┴──────┴───┴───┴──────┴────┴────────┘" >>${printdir}${jg}/${jg}${mm}.log
clear
test -e /usr/bin/vmore -a -r /usr/bin/vmore -a -x /usr/bin/vmore && \
vmore ${printdir}${jg}/${jg}${mm}.log  || pg ${printdir}${jg}/${jg}${mm}.log

echo -n '\n\n  需要打印该报表吗( y 为打印,其它为退出):   '
read prin
test "$prin" = "y" -o "$prin" = "Y" || exit 0
ttyname="/dev/"`tty|cut -c6-12`
ls ${printdir}${jg}/${jg}${mm}.log > ${printdir}temp.log
list=`cat ${printdir}temp.log | awk '{print $1}'`
for fl in $list
do 
echo "\\033[5i"
cat $fl >$ttyname
echo "\\033[4i"
done 
阅读(361) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~