免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1746 | 回复: 8
打印 上一主题 下一主题

SOS AWK或shell求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-06 02:41 |只看该作者 |倒序浏览
由于自己的懒惰,造成工作任务没完成,请大侠们帮忙啊SOS
--------------------------------------------------------------------------------
本人从事金融工作,我有一个数据文件需要处理,但是有一些地方我不明白
--------------------------------------------------------------------------------
文件大概是这个样子:一个贷款的数据库文件
--------------------------------------------------------------------------------

12510000001|户名|2002/11/01|2003/06/20|2003/03/21|20000.00|10000.00|5.1
12510000001|户名|2002/11/05|2003/06/20|2003/02/21|80000.00|10000.00|6.1
12510000001|户名|2002/12/01|2003/09/02|2003/03/21|20000.00|0.00|5.1
----------------------------------------------------------------------------------
第一域为帐号$2户名$3贷款日期$4到期日期$5上次清息日期$6贷款金额$7已还金额$8利率
------------------------------------------------------------------------------------
我是想要知道自上次清息日期至当前日期之间的利息,我上次问过两个日期间的天数,我就自己试着用awk写了一下,可总是得不出正确的结果,我想把每行的(当前日期-$5)*($6-$7)*$8的结果存为$9再把所有$6加个累计数$7加个累计数$9加个累计数。
------------------------------------------------------------------------------------
有几个问题:我不知道用awk写域间的运算
------------------------------------------------------------------------------------
还有我在查询时候自己输入的变量好象不认
我这样写:echo "请输入查询的数据: \c"
               read  cxsj
awk 'BEGIN { FS="|" ;} { OFS="|" ;} { if $4 < $cxsj }' myflie > newfile
但是没有结果,不知道是怎么回事               
-------------------------------------------------------------------------------------
以上问题请大侠指点指点。。。。。在此表示深深的谢意........

论坛徽章:
0
2 [报告]
发表于 2003-06-06 03:05 |只看该作者

SOS AWK或shell求助

awk用法有问题。
1, '  BEEGIN { FS="|" ; }    ..... '
         无须   OFS="|"
2, if中的$cxsj 是否是shell中read的cxsj?如果是,则误,用-v参数:
         awk -v cxsj=$cxsj  ' {...if ( $4 > cxsj ) ... }'
3 , $9不用设,用
    newline=$0"|"xxx ;
      print newline  ;
  xxx为你要设的$9内容,即可得到你要的输出

论坛徽章:
0
3 [报告]
发表于 2003-06-06 07:18 |只看该作者

SOS AWK或shell求助

SCO UNIX
  1. awk -F'|' '$4<"'$cxsj'"{$(NF+1)=($6-$7)*$8;A+=$6;B+=$7;C+=$NF;print $0}END{printf"%.2f  %.2f  %.f2\n",A,B,C}BEGIN{OFS="|"}'  filename
复制代码


试验:
如果cxsj="2003/09/01"则输出为:
  1. 12510000001|户名|2002/11/01|2003/06/20|2003/03/21|20000.00|10000.00|5.1 |5100
  2. 12510000001|户名|2002/11/05|2003/06/20|2003/02/21|80000.00|10000.00|6.1 |427000
  3. 100000.00  20000.00  4780002
复制代码

不知合乎楼主的意思不?

论坛徽章:
0
4 [报告]
发表于 2003-06-06 08:22 |只看该作者

SOS AWK或shell求助

[quote]原帖由 "muzx"]不知合乎楼主的意思不?[/quote 发表:
     
你的第九列的合计好象有问题啊?哈哈,怎么多了2呢??还有,$(NF+1)就可以多输出一列吗?另外两个日期可以直接用">"比较吗?请指教~~

论坛徽章:
0
5 [报告]
发表于 2003-06-06 08:28 |只看该作者

SOS AWK或shell求助

抱歉:输出格式写错了:
printf"%.2f  %.2f  %.f2\n",A,B,C
改正如下:
printf"%.2f  %.2f  %.2f\n",A,B,C
全部代码:
  1. awk -F'|' '$4<"'$cxsj'"{$(NF+1)=($6-$7)*$8;A+=$6;B+=$7;C+=$NF;print $0}END{printf"%.2f  %.2f  %.2f\n",A,B,C}BEGIN{OFS="|"}'  filename

  2. 12510000001|户名|2002/11/01|2003/06/20|2003/03/21|20000.00|10000.00|5.1 |5100
  3. 12510000001|户名|2002/11/05|2003/06/20|2003/02/21|80000.00|10000.00|6.1 |427000
  4. 100000.00  20000.00  478000
复制代码

论坛徽章:
0
6 [报告]
发表于 2003-06-06 08:30 |只看该作者

SOS AWK或shell求助

恩 这个我不会,先看看
既然是数据库文件,为什么不在数据库中解决?
那样应该很简单了

论坛徽章:
0
7 [报告]
发表于 2003-06-06 09:10 |只看该作者

SOS AWK或shell求助

我看不出来,上面的例子哪里进行了日期运算?

论坛徽章:
0
8 [报告]
发表于 2003-06-06 10:25 |只看该作者

SOS AWK或shell求助

两个日期的天数,在shell下比较麻烦,要写函数才能完成,故这里没有考虑。

论坛徽章:
0
9 [报告]
发表于 2003-06-06 14:37 |只看该作者

SOS AWK或shell求助

谢谢muzx你已经给了我很多启发,两个日期间天数的问题,上次nkliyong 哥哥帮忙解决了。。。。。。谢谢热心提供帮助的哥哥们......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP