|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手。
<br>
AlfredAho
盘算机迷信家、编译器专家AlfredV.Aho一向紧盯盘算机迷信研讨前沿。Aho传授一向努力于编程言语开辟,曾任贝尔实行室盘算机迷信研讨中央副主任,现为哥伦比亚年夜学LawrenceGussman盘算机迷信系传授。
Aho传授不但是“龙书”系列的作者之一,并且在上世纪70年月同BrainKernighan和PeterWeinberger一同开辟了形式婚配言语AWK。
克日,《盘算机天下》有幸约请到Aho传授谈一谈AWK的开辟。
问:您为何要开辟AWK言语?
和年夜部分言语一样,AWK是应实践必要而生的。上世纪80年月初,我仍是贝尔实行室的研讨员。当时我必要追踪经费预算。同时由于我在邻近的一所年夜学兼职,追踪先生的成就同样成了一件辣手的事变。
我想要一种玲珑的言语,能让我只写一两行代码就完成这些事情。可巧BrianKernighan也有这类需求,因而我俩一同开辟了一个专门针对浅易数据处置的形式婚配言语。
GREP对我们的影响很年夜,它是UNIX下一个很盛行的字串婚配工具。GREP也是我们研讨中央开辟的。GREP能够依据某个正则表达式查找文本文件中特定的行,然后输入它们。
我们想进一步扩大它,使得数字也能向字串那样处置。我们还想在打印以外供应一些盘算功效。
开辟AWK仅仅是用来满意我们,或是那些对盘算机不是很懂的人,处置惯例数据的必要。它接纳“婚配形式——实行举措”的体例事情。
问:在你们开辟AWK时有无哪一种程序或是言语已具有了这些功效?
我们最后是以GREP为原型(开辟AWK的)。可是GREP在“形式——举措”处置上有一些范围,以是我们想扩大它。事先,我还在研讨字串婚配算法和编译器里的高低文有关文法,盲目不盲目地自创了一些LEX和YACC(机关编译器的工具)里的工具。
LEX用于词法剖析,而YACC用于语法剖析。它俩都是机关编译器的主要工具,事先在贝尔实行室很盛行。厥后传播开来,用来开辟了良多小言语。BrianKernighan事先用它们来开辟数学排版和图形处置言语。
LEX用来分拣输出文本中的词法单位(词元)。词元是一串能够组成逻辑寄义的字符,好比,编程言语中的关头字“then”就是一个词元。我们对字母‘t’不感乐趣,对‘h’也不感乐趣,我们感乐趣的是‘then’这个组合。编译器的第一个部分就是词法处置单位,它读进源程序,剖析出个中的词元。
AWK受这类词法剖析体例的影响(很年夜),但AWK的定位是数据处置,并且对用户的盘算机背景请求很少。
问:您能冗长地向《盘算机天下》的读者们先容一下AWK言语吗?
AWK是一门处置文本文件的言语。它把文件看做一串纪录(record),缺省情形下一行即为一个纪录。每行又被拆成多少域(field)。我们能够把一行中的第一个词看做第一域,第二个词看做第二域,以此类推。一个AWK程序就是连续串“形式——举措”语句。AWK一次读进一行,然后对比程序中的各个形式举行扫描。一旦婚配乐成就实行响应的操纵(action)。
举个例大概更分明一些。假定我们有一个文件,它的每行都是一个名字后跟一个德律风号码。我们假定个中一举动“Pope15193741273”。AWK言语把第一域记作$1,第二域记作$2,。如今我们想查Pope的德律风号码,只需一行AWK语句:$1=="Pope"{print$2}
这条语句的意义是:若我们找到一行,其第一域为Pope,则输入其第二域(即德律风号码)。如今你已算是AWK程序员了^_^
AWK程序一样平常由一组“形式——举措”语句组成。形式能够是字串或数字的真假判别;举措是一组相似C言语的语句。
AWK跟着成为UNIX的标配而盛行起来。
问:在AWK的开辟过程当中,您最满意的是甚么?
AWK是由BrianKernighan、PeterWeinberger和我三团体开辟的。当时,PeterWeinberger很猎奇Brian和我成天在忙甚么。我们写好了AWK的语律例范,但短少一个完全的运转情况。Weinberger跑来对我们说“这看起来很像我写过的一个言语”,然后就在一个礼拜内写好了AWK的运转情况。我们用这个原始版原本处置我们感乐趣的数据,很称手。更主要的是,它为AWK供应了一个能够不休扩大的平台。
对我来讲,最主要的是这个项目让我懂得了Kernighan和Weinberger是怎样思索言语计划的——这真是一次很受害的互助!有了这个乖巧的编译器机关工具,我们就能够完整掌控我们的开辟了。我们很快到场了一些新的语法来改善AWK。整整一年,我们都在剧烈地会商哪些特征应当加进AWK,哪些应当抛弃。
言语计划是一项十分随性的举动,每一个计划者城市把他们必要的特征到场到言语当中,这些特征大概来自他们必要办理的成绩,大概来自他们办理成绩的体例。在开辟AWK的过程当中,我失掉了很多兴趣,而和Kernighan、Weinberger他们同事是我的职业生活中最安慰的事变。我可不想和他们那样的计划者合作。他们的编程才能无与伦比。
说来也成心思,最入手下手我们并没有想到,除我们三个之外还会有人用它。但很快我们发明,良多人无数据处置的需求,而这恰是AWK所善于的。人们不肯写几百行的C程序来做数据处置,而一样的事情只需几行AWK代码。因而愈来愈多的人入手下手利用AWK。
良多年后,AWK仍旧是UNIX下很经常使用的一个命令。时至昔日,即便已呈现了一多量相似的言语,但AWK仍旧终年坚持在编程言语盛行排行榜上25至30名的模样。而这统统都起于我们仨为了满意本人的必要开辟的一个小工具。
<spanstyle="padding-bottom:0px;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;font-weight:b
常用的linux命令,尤其是一些能帮你提高开发效率的命令,(eg:grep,awk,sed,split等); |
|