打字猴:1.700436997e+09
1700436997
1700436998 NR是当前输入行的行号,$0是输入行的内容。
1700436999
1700437000 下例统计每个单词的出现次数,并在最后输出单词及其计数。
1700437001
1700437002     { for (i = 1; i <= NF; i++) wd[$i]++ } END { for (w in wd) print w, wd[w] }
1700437003
1700437004
1700437005
1700437006
1700437007
1700437008 程序第一行是没有指定模式的动作,所以对每一行输入内容都有效。内置变量NF是当前输入行的字段数,它是自动计算出来的。变量 $i代表第i个字段,同样是自动计算出来的。语句wd[$i]++使用该值,也就是输入的一个词,作为数组wd的下标,并递增数组中的该元素。读取完最后一行输入后,使用特殊模式END做匹配。注意程序中有两种不同的for循环。第一种直接借用自C语言;第二种是在数组的元素上循环,在本例中,它输出多行文本,每行列出原始输入的每个单词以及该词出现的次数。
1700437009
1700437010 虽然Perl和稍后的Python接管了许多潜在应用场景,但awk今天仍然被广泛使用。它是一个核心工具,至少有四五种独立实现,包括阿诺德·罗宾斯的Gawk和迈克尔·布伦南(Michael Brennan)的Mawk。awk当然存在一些有问题的设计和未尽之处,但我认为它是最能善用语言编程能力的工具——用户花5~10分钟就能大体学会,而且程序代码往往只有几行。它并不适合写大型程序,但这并没有妨碍有人写出长达数千行的awk程序。
1700437011
1700437012 作为被高频使用的shell管道组件,sed广受欢迎。我甚至有一张保险杠贴纸,印着
1700437013
1700437014 “Sed and awk: together we can change everything.”[12]
1700437015
1700437016 值得注意的是,sed、awk、Make、Yacc和Lex都实现了某种程度的模式-动作范式。这些语言中的程序由一系列的模式和动作组成:基本操作是根据每个模式检查输入,当模式匹配时,执行相应的动作。模式和动作有时可能会被省略,在这种情况下,会执行默认行为。
1700437017
1700437018 例如,grep、sed和awk都可以用来匹配单个正则表达式。如果特定正则表达式对以下3个命令都有效,则3个命令是等价的:
1700437019
1700437020 grep resed -n /re/p awk /re/
1700437021
1700437022
1700437023
1700437024
1700437025
1700437026 对于基本上由测试和相应动作组成的运算,模式-动作范式自然而然。流行文化中的awk元素见图5-15。
1700437027
1700437028
1700437029
1700437030
1700437031 图5-15 流行文化中的awk元素[13]
1700437032
1700437033
1700437034
1700437035
1700437036 UNIX传奇:历史与回忆 [:1700434703]
1700437037 UNIX传奇:历史与回忆 5.5 其他语言
1700437038
1700437039 Unix编程环境及其语言开发工具、丰富的潜在应用领域,当然还有精通编译器、编程语言理论和算法的组内专家,推动了其他语言的设计和实现。我不打算深究其中任何一种语言,但值得快速点个名。
1700437040
1700437041 没有必要理解这些语言的任何细节。真正的经验是,拥有了广泛的兴趣、语言专业知识以及像Yacc和Lex这样的工具,中心成员能够相对容易地为新应用领域创造新语言。如果没有这些因素的结合,将会困难得多。我想,如果没有这些因素,许多有趣的语言就不会存在。
1700437042
1700437043 最明显的例子是C++。它始于1979年,当时本贾尼·斯特劳斯特鲁普刚从剑桥大学获得博士学位,加入1127中心。本贾尼对仿真和操作系统感兴趣,但既有语言并不能真正满足他的需求。因此,他从最接近需求的Simula[14]中汲取养分,并将其与C语言融合。1980年,面向对象编程思想与C语言的效率和表现力相结合,结果得到了一种“带类的C语言”。
1700437044
1700437045 事实证明这是个好组合,而这门语言也繁盛起来。1983年,它得名C++,这是里克·马希蒂(Rick Mascitti)形容C++增量运算符的双关语。如今,C++是最广泛使用的编程语言之一,是微软Office套件和谷歌基础架构的重要组成部分,也是你最喜欢的浏览器(不管哪种)、许多视频游戏和其他幕后软件的核心。
1700437046
[ 上一页 ]  [ :1.700436997e+09 ]  [ 下一页 ]