awk应用-支票簿的结算

来源:互联网 发布:淘宝退款邮费 编辑:程序博客网 时间:2024/05/17 06:31

这是一个简单的应用,用于处理支票登记条目。虽然不一定是最简单的结算支票簿的方法,但使用awk来完成某事的速度会快得令人惊奇。假设已经输入了一个如下的文件:

cat checkbook.test
1000
125   Market     -125.45
126   Hardware Store     -34.95
127   Video Store -7.45
128   Book Store  -14.32
129   Gasoline    -16.10

在第一行列出了初始的余额。其他的每一行提供了单个支票的信息:支票号,使用支票的场所和支票金额。这3个字段由制表符分隔,账户的数据用负数表示。于是,存款就可以用证书表示。

这个脚本的核心任务是必须得到初始的余额,并从余额中减去每个支票的全额。我们可以为每个支票提供详细的行来与支票登记内容比较。最后打印出最终的余额。代码如下:

cat checkbook.awk
# checkbook.awk
BEGIN { FS = "\t" }
    #1 期望第一条记录为初始余额。
    NR == 1 {print "Beginning Balance: \t" $1
    balance = $1
    next   #取得下一条记录并结束
}
#2 应用与每个支票记录,将余额与数量相加。
{   print $1 , $2, $3
    print balance += $3 #支票数额有负数
}

运行这段程序得到的结果如下:

$ awk -f checkbook.awk checkbook.test
Beginning Balance: 1000
125 Market -125.45
874.55
126 Hardware Store -34.95
839.6
127 Video Store -7.45
832.15
128 Book Store -14.32
817.83
129 Gasoline -16.10
801.73

这个报告很难阅读,但我们可以使用printf 语句来格式化报告的格式。最重要的是该脚本执行了我们所期望做的事情。注意,在awk中编写这样的脚本仅需要几分钟。如果用类似于C的语言来编写这样的程序将需要更长时间,其中一个原因是,你必须写更多行的代码,而且可能需要进行更低层次的编程。可以用许多精心的设计未改善这个程序,而且精炼一个程序将需要更多的时间。而使用awk可以很容易地将基本功能独立出来并加以实现。

参考资料:http://www.linuxawk.com/communication/501.html

0 0
原创粉丝点击