awk应用-支票簿的结算
2015-06-17 21:53
190 查看
这是一个简单的应用,用于处理支票登记条目。虽然不一定是最简单的结算支票簿的方法,但使用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
$ 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
相关文章推荐
- 文本处理工具AWK详解
- awk简介与学习笔记收集第1/3页
- linux shell awk获得外部变量(变量传值)简介
- sed或awk处理文件最后一行的实现方法
- awk中查看包含某两列字符的用法
- awk区间取值的例子
- awk实现Left、join查询、去除重复值以及局部变量讲解例子
- awk中让人郁闷的system()函数
- awk中实现ord函数功能
- awk中RS、ORS、FS、OFS的区别和联系小结
- 分享awk变量$0的妙用
- awk正则表达式和内置函数的使用方法实例详解
- Shell正则表达式之grep、sed、awk实操笔记
- Linux里awk中split函数的用法小结
- Shell对比两个文件中的记录有多少重复
- awk学习系列-第3/3部分
- grep,awk,sed实例
- Linux如何使用awk文本处理工具进行数组排序
- awk 正则表达式
- awk命令简介