在统版的报表中查找有关于利息支出项的,但只在"柜员轧帐单"里找到了.那么每个网点当天有几个柜员做过交易,那这个网点就有几张"柜员轧帐单",可是偶把这几张表的定活期收支及利息累加了一下,与"邮政储蓄营业轧帐单"里的定活数字却对不上,据业务管理说是"柜员轧帐单"是昨日本地营业终了之前的柜员交易的数据.而"邮政储蓄营业轧帐单"是昨日包括异地发生的所有数据........那么这两个表的数据由于截止时间与本地异地的区别就不可能相符..意思就是这个脚本统计出来的数据也不可能完全正确,就只能做个参考了,请各位业务.技术高手再想想办法,能做到再精确些当然更好罗.
脚本取的报表来自统版下的print/网点机构号下的rpt_Mnacc_001{机构号}{日期}.dat (邮政储蓄营业轧帐单) 与 tlrbill{柜员号}_001{机构号}{日期}.dat (柜员轧帐单) , 自定义修改方法同"查询网点活期.定期.定活比例.余额的脚本"
http://unix-cd.com/unixcd12/article_view.asp?id=2462
,需要自定义增加或精简输出的兄弟也可自行修改取值范围及输出.
PS:呵呵,还有个问题,就是要显示出的列太多,屏幕实在是显示不下,所以就会造成显示跳行,如果是打印出来(也如上贴介绍过的,自行加入prin函数即可),那看上去应该没问题.或是把最后awk处理后的数据导出为文件,再用宽行显示器(VMORE)能正确显示.
#!/bin/ksh
#查询网点定活收支.利息支出..余额的脚本 V051128
#乐山市沙湾区邮政局 宋 涛
prin() #终端打印函数 #暂时未用
{
echo "\\033[5i"
cat $1 > $(tty)
echo "\\033[4i"
}
data()
{
month=$(date +%m)
day=$(date +%d)
year=$(date +%Y)
day=$(expr $day - 1)
if [ $day -eq 0 ]; then
month=$(expr $month - 1)
if [ $month -eq 0 ]; then
month=12
day=31
year=$(expr $year - 1)
else
month=$(printf "%02d" $month)
case $month in
01|03|05|07|08|10|12) day=31;;
04|06|09|11) day=30;;
02)
if [ $(expr $year % 4) -eq 0 ]; then
if [ $(expr $year % 400) -eq 0 ]; then
day=29
elif [ $(expr $year % 100) -eq 0 ]; then
day=28
else
day=29
fi
else
day=28
fi
;;
esac
fi
fi
test $(expr length $day) -eq 1 && day=$(printf "%01d"$day)
day=${month}$day
}
input()
{
while :
do
clear
echo "\n\t\t\t收 支 量 查 询 表\n\n"
[ "$filedir" ] && echo "\n 请输入欲统计收支量的县级901机构号(回车默认为沙湾局): $filedir" \
|| read filedir?" 请输入欲统计收支量的县级901机构号(回车默认为沙湾局): "
[ "$filedir" ] || filedir="511111901"
case $filedir in
0) exit 0 ;;
511111901) dir="511111001 511111002 511111003 511111004 511111005 511111006" ;; #请在此更改或按此格式增加dir 变量
*) echo -n "\n 无此901机构号,请检查修改或增加脚本dir变量 \n" ; read ; filedir= ; continue ;;
esac
echo
[ "$day" ] && echo -n " 请输入欲统计收支量的日期(回车默认为昨日): ${day}" \
|| read day?" 请输入欲统计收支量的日期(回车默认为昨日): "
[ "$day" ] || { data ; break ; }
case $day in
0) exit 0 ;;
yesterday) data ; break ;;
esac
[ $(expr length $day) -ne 4 ] && { echo -n "\n 日期长度错误!\n" ; read ; day= ; continue ; }
[ "$(echo $day|egrep '^[0-1][0-9][0-3][0-9]$')" ] && break \
|| { echo -n "\n 日期输入错误!\n" ; read ; day= ; continue ; }
done
}
trap "tput sgr0 ; echo ; rm ~/yetj.dat 2>/dev/null; exit " 0 1 2 3 9 15
tput bold
scabs="scabs" #四川统版用户名
scabsdir=/usr/${scabs} #四川统版目录
filedir=$1 #县级901机构号
day=$2 #统计日期
[ "$LOGNAME" = "$scabs" ] || { echo "\n\n 请由 ${scabs} 用户执行本程序\n" ; exit 0 ; }
input
for name in $dir
do
filename=${scabsdir}/print/${name}/rpt_Mnacc_001${name}${day}.dat
[ -r $filename ] && tmpvar=$(tr "|" "\n" < $filename |sed -n '1p;2p;270p;273p;281p;284p;321p') || \
{ tmpvar=$(echo "$name" 暂无${day}日报表) ; echo $tmpvar >> ~/yetj.dat ; continue ; }
sumd=0;sumh=0
for lxname in ${scabsdir}/print/${name}/tlrbill*_001${name}${day}.dat
do
awk -F"|" '{if (NR==6) d=$8 ; if (NR==14) h=$8}
END {print d,h}' $lxname |read d h
sumd=$(echo $sumd+$d| bc 2>/dev/null)
sumh=$(echo $sumh+$h| bc 2>/dev/null)
done
echo $tmpvar $sumd $sumh >> ~/yetj.dat
done
clear
awk 'BEGIN{printf("\n%58s\n\n%-10s\n\n%-10s%-16s%-14s%-14s%-10s%-14s%-14s%-10s%-14s\n\n", \
"收 支 量 查 询 表","统计日期: '$day'","机构号","网点名","定期存入", \
"定期支出","利息支出","活期存入","活期支出","利息支出","余额")} \
{if (NF==2) {printf("%-10s%-16s\n",$1,$2)}
else {printf("%-10s%-16s%-14.2f%-14.2f%-10.2f%-14.2f%-14.2f%-10.2f%-14.2f\n",$1, \
substr($2,1,14),$3,$4,$8,$5,$6,$9,$7) ; sum3+=$3;sum4+=$4;sum5+=$5;sum6+=$6;sum7+=$7;sum8+=$8;sum9+=$9 } }
END{printf("\n%-26s%-14.2f%-14.2f%-10.2f%-14.2f%-14.2f%-10.2f%-14.2f\n","合计", \
sum3,sum4,sum8,sum5,sum6,sum9,sum7)}' ~/yetj.dat | pg
|