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
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 #支票数额有负数
}
# 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
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
- awk应用-支票簿的结算
- awk的应用
- 自动结算/应用/初始化
- 应用内结算 API
- awk内置变量的应用
- awk应用-信息的检索
- 国际结算的读书笔记
- 订单的结算日期
- 结算平台的搭建
- awk 应用
- awk应用
- 技巧:AWK 关联数组的一个应用
- 一个稍微复杂的awk & sed应用
- grep 、sed、awk的一些应用
- awk应用-计算学生的平均成绩
- 此版本的应用未配置为通过google play结算
- google play 此应用使用的结算功能版本已不能受支持。
- 股指期货的结算是怎么回事
- 2015061704 - 方法返回值状态码
- c++ dynamic_cast
- 黑马程序员------内部类
- cocos2dx 中如何实现安卓返回按键的反馈
- C语言指针与二维数组(二维数组与一维数组关系)
- awk应用-支票簿的结算
- 黑马程序员------File及IO流
- java tcp
- 关于vs2010 error: LNK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决...
- poj 1141 Brackets Sequence(区间dp)
- Android开机广播android.intent.action.BOOT_COMPLETED
- Linux 命令 wget
- I/O ACTIONS
- JAVA字符串格式化-String.format()的使用