蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月26日 11:18


这段代码错在哪?shell中的awk编程。

仔细看了很长时间,也没有看出,错在哪里。:cry:
[code]
#打印指定期限的利息清单。

lsz_out()
{
qixian=$1   #获取变量(期限)
dir="/tmp/lsz_"$qixian".tmp"  #生成临时文件

dbaccess bankstar -<<-End 2>/dev/null    #导出指定期限的流水帐。
unload to $dir select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=$qixian;
END

sort -t "|" -k1n <$dir | awk 'BEGIN {
#对/tmp/lsz.tmp以“|”为间隔,第1列rq排序后,由awk处理
FS="|"
OFS="\t"
total=0
printf ("5211利息支出、2611应付利息分档次明细帐\n")
printf ("信用社名称:_________          档次:_________     打印日期:_________\n")
printf ("  日  期  | 所  号 |流水号|     帐     号     | 帐 户 名 |期限|业务种类| 利息金额 \n")
printf ("====================================================================================\n")
}
{
printf ("%10s|%-8s|%-6s|%19s|%-10s|%-4s|%-8s|%8.2f\n",$1,$2,$3,$4,$5,$6,$7,$8)
total=total+$8
}
END {
printf ("====================================================================================")
printf ("%60s%11.2f\n","总计:",total)
}'

rm $dir  #删除临时文件
}

awk 'BEGIN {
split ("0#3#6#12#24#36#60", qx, "#")  
} #将期限作为数组。
END {
                for i in qx {        lsz_out qx[i] }     #打印数组中各档次的清单。

}'


[/code]

这段代码错在哪?shell中的awk编程。

[code]awk 'BEGIN {
split ("0#3#6#12#24#36#60", qx, "#")  
} #将期限作为数组。
END {
      for i in qx {   lsz_out qx[i] }     #打印数组中各档次的清单。

}' [/code]
改为
[code]for i in 0 3 6 12 24 36 60;do lsz_out $i;done[/code][/code]

这段代码错在哪?shell中的awk编程。

如何计算一个包含有数据记录的文件有多少行?

这段代码错在哪?shell中的awk编程。

1.awk 'END{print NR}'
2. wc -l
3. sed '$='
..........太多方法以吧?

这段代码错在哪?shell中的awk编程。

:cry:
[code]







lsz_out()
{
qq=$1
#获取变量(期限)
dir="/tmp/lsz_"$qq".tmp"
#生成临时文件
#导出指定期限的流水帐。
dbaccess bankstar -<<-End 2>/dev/null
unload to $dir select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=$qq;
END

pppage=45 #分页行数45


#对/tmp/lsz.tmp以“|”为间隔,第1列rq排序后,由awk处理
sort -t "|" -k1n <$dir | awk 'BEGIN {
FS="|"
OFS="\t"
total=0
print "5211利息支出、2611应付利息分档次明细帐\n"
print "信用社名称:_________          档次:_________     打印日期:_________\n"
print "  日  期  | 所  号 |流水号|     帐     号     | 帐 户 名 |期限|业务种类| 利息金额 \n"
print "===================================================================================="
}
{
printf ("%10s|%-8s|%-6s|%19s|%-10s|%-4s|%-8s|%8.2f\n",$1,$2,$3,$4,$5,$6,$7,$8)
total=total+$8
}
END {
print "===================================================================================="
printf ("%60s%11.2f\n","总计:",total)
}'
rm $dir  #删除临时文件
}

for i in 0 3 6 12 24 36 60;do lsz_out $i;done #分档次打印。

[/code]

提示 36行语法错误。end of file unexpected.

这段代码错在哪?shell中的awk编程。

-->

awk中应该不可以这么引用shell中定义的函数。

BTW:这句是什么意思? :oops:
-->

这段代码错在哪?shell中的awk编程。

dbaccess bankstar -<<-End 2>/dev/null
unload to $dir select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=$qq;
END

这段代码是从数据库中导出需要的纪录。

这段代码错在哪?shell中的awk编程。

用sh -x ……的形式运行看看脚本执行的状况,贴出执行信息。
我怀疑是执行过程中的一些字符扩展破坏了一些quote符的完整性。
现在的信息确定不了:(

这段代码错在哪?shell中的awk编程。

[code]
dbaccess bankstar -<<-End 2>/dev/null
unload to "/tmp/lsz_0.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=0;
unload to "/tmp/lsz_3.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=3;
unload to "/tmp/lsz_6.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=6;
unload to "/tmp/lsz_12.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=12;
unload to "/tmp/lsz_24.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=24;
unload to "/tmp/lsz_36.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=36;
unload to "/tmp/lsz_60.tmp" select rq,cxsh,lsh,zh,hm,qx,ywm,lx from lsz where lx>0 and qx=60;
END

[/code]

提示出错:
-->

这段代码错在哪?shell中的awk编程。

这段代码错在哪?shell中的awk编程。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com