The AWK Programming Language (Chinese review)

我读完了Aho和Kernighan和Wenberger著的经典书籍《The AWK Programming Language》. 在这篇文章我要分享我的感受。 为什么我突然决定学习AWK、为什么用这本书以及为什么我在这本书中除了AWK本身看到了更多知识。
1. Review
1.1. 什么是AWK以及为什么它值得学习?
AWK是一种专门用于处理文本的程序语言。 在这种语系中它不是唯一一个语言,比如还有Perl,但是因为大概每个服务器现在都有AWK,无论你对编程历史和哲学感不感兴趣,它还是值得学习皮毛。 但是我本身对电脑和赛博行业发展和文化很感兴趣,所以除了学习语言之外我也尽量尝试从字里行间领会上下文。
这个上下文其实从作者们开始。 他们是谁? Aho是全世界最有名的形式语法专家,他写了《紫龙书》(《编译原理》)。 Kernighan是UNIX和C语言的创造者,大概每个大一学生都看过他的《C程序语言》。 优秀的团队。
实际上,看AWK的时候,我好几次重温《C语言》,因为想要对比它们的风格区别。
AWK确实很像C。 它的条件结构(if)和循环结构(for/while)与C差不多。 突然我发现:我最讨厌的这种马马虎虎的编程口味(1/++n)其实不是来自于大一学生们逞能,而来自于Kernighan本身。
那为什么Kernighan显示出那么懒散的风格? 对不起,懒散是太严重了。 重温《C语言》和阅读《AWK语言》都令我感觉它们好像有DIY的风味。 真的,他们并不重视可读性和严格性,每个程序很容易破坏。 但是也可以在什么都没有的系统上搭建可以开始工作的环境。
思考一点之后我可以理解为什么这样。 那时电脑行业比现在小很多,每个计算机可以说是DIY的、定制的,而且没有环境标准和期待。
现在我可以说清楚:AWK是我见过的程序语言之中最DIY的。 你用它什么都可以写,只需要几行代码,但是所写的程序只能有一个用户,就是你。
1.2. AWK到底适合什么样的运用?这本书如何介绍它?
AWK非常适合做纯文本分析和生成报表。 如果你的数据只由被空格分割的元素组成,AWK只需要一行代码,就可以进行很多任务。 比如计算每一列的总数或者平均数。
这本书的头三章介绍语言本身:常见的结构和最常用的例子。 如果你只想学会写AWK,就阅读头三章。
但是第4到第8章真的可以教给你所谓“UNIX精神”以及示范如何滥用AWK做你想不到的它会做的事。 比如介绍随机文本生成器、简单的拟似汇编语言解释器以及简单的关系数据库。 AWK可以叫作“计算机专家的瑞士刀”。

有一次我听过一句话:“1行bash代码包含比1000行C更多UNIX精神”。 现在我能理解为什么了。 对于有比较入门的编程经验的人,能感觉这句话有悖论。 归根结底,UNIX内核是使用C语言写的。
但是一看到Kernighan的代码风味和他在AWK实践的原则,上述摘要就容易理解了。 比如:大家都知道写C的时候很容易搞错,遗留内存泄漏或者内存错误。 Kernighan貌似一点不注意这个问题,为什么? 答案是因为所有他预期的程序不超过500行代码。 在500行代码内找到缺点其实没问题。 那如何写相对大的程序? 答案是:使用bash把很多小快C程序粘贴在一起。 所以UNIX有那么多的进程之间交流方式。 Bash会自己控制内存消耗,所以那个臭名昭著的内存错误并不存在。
1.3. 结论
AWK是被解释的C语言版本。 它比C更C。 它长于流性数据处理,但也可以用以写很多小程序,辅助程序员的日常工作。
如果不需要深刻学习AWK,阅读头三章就足够,或者做完任何比较完整的网络课程。
尽量避免写大规模的C语言程序。
1.4. 联系方式
如果您在此博客或其他页面中发现任何对您有用的内容,请订阅并打赏。 请您转发、分享和讨论,您的反馈可以帮助我变得更好。