2008年10月16日星期四

谈谈RHEL的使用

两台过百万的硬件集群设备上,跑着某个证券交易所的一个业务。然后你选勒debian和centOS, 很牛X的对你的老板说,看,我给公司省了多少万,这种东西这么容易,自己都可以搞定的,Red Hat/Novell公司的售后支持啥都不懂,还不如自己用google,网上论坛或者邮件列表问呢。

老板赞许的看着你,心想你这个手下真的能力很强,这下今年IT基础建设的预算,又可以有一笔钱节省出来挪作他用了。

某天,你运气不好,系统出了问题,然后你们公司紧急要求服务器厂商的人,存储厂商的人,oracle的人,应用开发公司的人都紧急到场,开协调会讨论排错问题,而且要求到场的都是各个原厂商的资深技术专家。 这套集群上每天交易开盘,有大概50万股民会上来做交易(做股票的同学都知道,一个证券公司如果有开户交易股民50万,那是一个小证券公司), 现在离天亮还有7个小时。
一大堆人,包括你在内,你的老板在内,都忙起来勒。大家压力都很大,因为如果找不出故障原因和解决方案,基本上你们公司的麻烦大了,碰巧这几天股票不稳定,股民情绪本来就不好。

服务器和存储厂商的人做了诊断,拿出勒诊断报告,排除了硬件问题,Oracle的牛人拿出了详细的诊断报告,排除勒数据库的问题, 业务应用开发商也是如此。

最后,大家的目光聚焦到了你的身上, 没错,就是你。 你的确从一个技术人员的角度,给公司推荐了成本低廉的方案,但是你的过于自信和欠缺成熟的考虑,现在要让你付出代价勒。

我不知道这里同学知道不知道,一个正常的小证券公司,前一天的交易数据量,在清算后,为了排错,做一次完全的数据移动前前后后要花多少时间? 2个多小时 ! 光纤柜柜对倒 !

你还有4个小时,你的老板,老板的老板,那个负责证券公司业务的老总,意料之中的出现在你面前,问你,为什么操作系统厂商没有来?为什么不参与排错? 你无语了。你的老板给你打圆场, 如此这般的解释勒一下, 你的老板的老板严厉质问你老板还有你,他说: 我们缺这些钱么?我们需要你们的个人的小聪明么?还有4个小时开盘,到时候系统还没有弄好,你们都等着股民打上门吧。


这不是一个搞笑的故事,这是一个真实的故事,发生在2006年的国庆节以后, 我就是那个服务器厂商在现场的一个顾问, 故事中的"你" 是某个证券公司数据中心的IT运维经理,那天,大家的运气都不错,而且各个原厂商来的技术专家都非常资深,在第二天开盘的前3个小时内,我们找到并排除了问题,并且重写了数据移动的脚本,将数据移回服务器花了1个半小时,然后顺利撑过了这一天的交易。

那两台系统上跑的就是CentOS. 故障的原因是,CentOS虽然在源代码级和RHEL非常接近,但是CentOS组织没有和任何硬件厂商有战略合作,他们编译出的二进制系统,也就是CentOS linux,和RHEL 企业版有至少10%以上的差异,主要是编译过程的工程手段不同,以及硬件厂商的特定patchset造成的,另外CentOS组织作为一个非营利性的组织,无法对编译出的CentOS linux二进制系统在各种平台上做广泛的和完整的测试,所以在上面这个故事中,由于我们在每台服务器上都部署了光纤双环路,两块FC HBA卡需要在linux下面做绑定,CentOS linux在安装了厂商提供的 FC HBA驱动之后,CentOS linux并没有在这种卡上做完整测试,而且更要命的是,那个提供FC HBA卡的硬件厂商也没有对CentOS做测试和认证,所以CentOS 只能支持这种FC HBA上芯片家族中的一种,但是却把这两块卡当作那种芯片识别出来而且去驱动勒,由于是双环,卡之间除了failover还需要做load balance,因此触发勒CentOS和驱动之间的兼容性问题,导致系统出现问题。
我通过修改卡厂商的srpm包,调整了驱动源代码里面的参数,冒险尝试了一下重新编译挂到勒CentOS 上,结果运气好被蒙对,驱动本身的确可以支持相近系列的芯片,但是需要在驱动源代码的参数上做调整且重新编译。

我, 后来和那个IT运维经理成为了关系非常不错的朋友,一直到现在。

我的逻辑是,非商业版本的linux,自己家用玩玩是没有问题的,但是只要你不是写这个linux的人或者你对这个linux的熟悉程度远远没有把握,你就不要盲目自大去把它用在关键的生产环境。 里面的细微末节你是根本不知道的,而且不可能指望每次都像上面这个故事的主人公运气这么好,弄不好会出人命的。

中国和国外的证券公司和期货公司用redhat RHEL很普遍,他们有些公司的技术人员linux水平也都是不错的,你看哪个敢用没有专业服务的?

当然,一些不重要的网站之类的,用debian/slackware/centOS都是不错的选择。

希望大家能够正确认识各个版本的优劣,精确选择合适的linux.

good luck,

2008年10月11日星期六

功利主义

   一直以来我对“功利主义”的理解或多或少地与“利己主义”划上了约等号,认为功利主义应该是一种个人追求利益最大化的伦理学,并且以为在这追求的过程中行为动机和手段都并不处于十分重要的位置。但是前不久看罢穆勒的《功利主义》一书,基本了解穆勒对功利主义所作的阐述后,才发现,不论我是否认同或信服穆勒对功利主义伦理学的定义和阐述,至少我是理解错了功利主义。 
   
   从古希腊哲学家伊壁鸠鲁(Epicurus)提出“快乐主义伦理学”,到功利论创始人,英国哲学家边沁提出的更具条理性的“最大幸福原理”,至我所读到的这本由穆勒所著的《功利主义》,功利主义伦理学被不断完善,并且在穆勒笔下成为了看着接近完美的伦理学说。 
   归纳书中第二章“功利主义的含义”中穆勒对于功利主义的定义,功利主义即为“达到最大善”,即得到最大的(或尽可能大的)幸福,又或者,“达到最大恶”,即减缓或预防最大的(或尽可能大的)痛苦和不幸。这样的初步定义是非常make sense的,作为理性人规避痛苦追求幸福是毫无疑问的,但接下来穆勒对于功利主义的更深一层含义则是如下:“功利主义的标准不是指行为者自身的最大幸福,而是指最大多数人的最大幸福。” 
   由此便产生了我阅读本书的第一个与我以往认识不同的疑问,就是功利主义中对幸福的最大是强调个人,抑或最大多数?当然,假若每个人都强调的是个人幸福的最大化,如此一来必将达到最大多数人的幸福最大化,但是,在行为者作出自身行为选择的时候,是要站在最大化行为者幸福的角度,还是最大化最大多数人(即当他人幸福比自身幸福更容易达到时)幸福的角度。 
   而穆勒写道,“一个人的高尚使他人感到更为幸福,使广泛意义上的世界成为巨大的受益者……功利主义唯有普遍培养人们的高尚情操方能实现其最终目标,哪怕每个个体只能通过他人的高尚而受益,哪怕自身的幸福在泽被众人的过程中受到眼中的削弱。”如此一来,穆勒对功利主义的定义则是站在最大多数人的角度最大化最大多数人的幸福。 
   “人类发展的内在要求绝不是让人成为自私自利之徒,而是在于某种更高的追求,即充分体现人何以为人的实质。”“每一个富有智慧并且欣然投身于这一斗争事业中的人,无论他所起的作用多么微不足道,他也必将从斗争本身获得一种崇高的享受,这种快乐是任何自私自利的纵欲行为换不来的。” 
   读到穆勒对功利主义所作的上述阐述时,我很突然地往“集体主义”身上靠了靠。在书中,功利主义被说明是具有无私性质的,并且在功利主义理论中,为了实现这种最大化最大多数人的幸福,社会应从法律,教育等方面着手,由此使得在社会教育下培养一种“无私”的社会氛围。“一个人不可能产生只顾自我的幸福观,每个人都养成一种习惯性行为动机去直接促进普遍的善。” 
   读了大段大段穆勒关于功利主义的标准以及精神内涵的阐述,想必会觉得功利主义看上去并不如同现实中“功利”,穆勒为功利主义安上了一顶华美的冠冕堂皇的被极大美化的帽子。“功利主义是无私的”,倘若认为这是功利主义的实质,好像又错了。 
   正当我感觉功利主义比想象中“高贵”的时候,穆勒写道,“功利主义的理想境界:人如何待你,你也要如何待人。” 
   这句对功利主义理想境界的描述最应该注意的是两句话的顺序,是人如何待你,你才如何待人,而非你如何待人,人如何待你。这一逻辑的先后顺序表明功利主义所谓的“理想境界”依然是以待己为更高。事实上,当很多伦理学学说主张“以德报德,以德报怨”这种做法的时候,功利主义学说一直认为根据“应得”信条“以德报德,以怨报怨”才是符合人类本性的。 
   而再进一步说,穆勒写道:“公共施恩者的情况是少数(极少此类情况才被要求考虑公共功利),其他场合人们只需关注私人功利即少数人的利益或幸福就足矣,唯独那些自身行为的影响已波及整个社会的人士才有必要习惯性地考虑行为目的的广泛性。” 
   所以,当我以为功利主义是如此大条道理地明着无私,原来它实则上也是允许有“例外”的。这不仅仅是出于“人性的弱点”而选择眼前的利好,而是你本来就应该选择眼前的利好,因为虽然功利主义的理想追求是达到最大多数人的幸福最大,但这毕竟是“极少类”的“少数”,因此尽管暗着自私,关注少数人的利益或幸福就好了。但就这样用“人性的弱点”来解释最终行为者选择了少数人利益或幸福的行为似乎有点不符合功利主义标榜自身固有的无私性质,因此,穆勒用“人类活动具有复杂性”作为对此的解释。 
   
   当然功利主义不会如此赤裸裸地说自己理解这种少数,因此兜来兜去,就像我们小学生写作文总要隔几句写写关键词或重写题目一次,穆勒又开始写功利主义的无私性质,以及对他人利益的重视。在本书第三张“功利主义的终极约束力”中,穆勒指出“我们内心的主观感受就是一切道德的终极约束力”,并且,“当一个人长大成人后,完全无视他人利益是绝不可能的。至少他们必须禁止自己做出各种恶劣的伤害行为,同时尽量避免受到这样的伤害(哪怕只是为了保护自己)。个体开始意识到自己对他人的关注似乎成了一种本能。” 
   
   来到本书第四章“功利原理的证明”,我多少有点感想的是牵扯到对于现今大多数人并不能直接归类为真正的幸福有关的事物,比如金钱。我们当然知道没钱万万不能,金钱很重要,但是金钱是否能够归类为幸福的一种恐怕是没什么人能轻易下定论的。而穆勒在此则指出,“幸福的成分多种多样,每一种本身都值得渴望,而不仅仅是作为一个整体时才值得渴望。美德并不是唯一这样的事物:即最初只是一种手段,假如不用来获取别的东西就变得无关紧要,然而通过与获取之物发生关系,最终它本身也得到人们的强烈渴望。” 
   美德是被公认为可属于幸福的一种的,而穆勒则指出,金钱的本质虽是不为人们所渴望,不属于幸福的,“人们并没有对它产生原始的渴望或动机,它纯粹是有益于让人得到快乐,驱除痛苦。”但金钱渐渐成为了获得幸福的手段,也即手段成了目的的一部分,成了追求更重要的东西的一部分。于是,手段渐渐也变成了目的的一种,即金钱由追求幸福的一种也可能变成了幸福的一种。“无论何种事物被作为实现某种更高目的(最终为幸福)的手段而受渴望,都是因为它本身被视为幸福的一部分而受渴望。” 
   于是我又有疑问了,既然功利主义定义自己的幸福为最大多数人的幸福,那么在此认为金钱属于幸福,难道个人追求金钱也是属于“最大多数人的幸福”?难道这个世界上人人都是巴菲特? 
  自然,穆勒接下来又回答了我的疑问。 
  “功利主义标准对其他后天获得的渴望尽管也予以认可和赞成,但要求它们保持在一定限度范围内以免破坏而不是促进普遍幸福;而对美德的热爱则被视为促进普遍幸福最重要的因素,要求个体尽一切可能的力量提高在这方面的修养。” 
   至此,我完全明白了,功利主义对于幸福的定义是flexible的。

2008年10月8日星期三

心有猛虎,细嗅蔷薇

   一个男人究竟应该怎样爱自己的女人? 
   
   这个问题一出来,相信一个男人会给出一个答案。但仔细看很多人的答案,本质上应该大致相同,那就是大男子主义泛滥。爱,也是居高临下颐指气使地爱。老子爱你,那是看得起你。管你,打你,骂你,老子那是为了你好,是爱你的一种方式,懂不懂? 
   
   有的男人有时候不是需要女人,只是想占有女人。你和他好了,他就拿你当他的私人财产了,而且是流动资产,可变卖的。别期待这种贱男男会好好待你,在他眼里,他最值钱的不动产就是他自己。上半身的脑子是一回事,下半身的蛋子是另一回事。就是这样。 
   
   做为一个男人,我要说:这样二的男人,我真的很羞愤你们!不做饭不洗碗不打扫卫生也就罢了,知道你们还是猴子的时候是管打猎的,不管采野果捡树枝烤猪肉的。但难道进化了这么多年,你爱一个女人的能力还仅仅停留在搞大她的肚子的程度上么? 
   
   从小到大,科学文化知识是该学习,但等到了年纪了,瞟到姑娘小吊带大白腿的脑子里也有想法了,爱一个人的能力也是要学习的。看看,滚滚红尘中,拧巴纠结贪恋不甘的红男绿女,痛心是吧?觉得爱很难是吧?最困难的东西往往也是最简单的东西,反过来,一样成立。
   
   想知道怎么简单地爱你的女人么?那么我推荐你看这部电影,《明月照尖东》。 
   
   故事很简单,关之琳饰演的公关小姐是张学友饰演的黑老大太子的女朋友,但黑老大人在江湖经常出生入死,犯事儿了就得出去躲躲。就是他出去躲的时候,黎明饰演的警察爱上了关之琳。最后老大回来和警察争马子没成功便自杀了。 
   
   你别忙着说这片子俗或者垃圾。爱,都是很俗的。你我都是俗人,摆脱不了荷尔蒙的控制,所以你注定会爱上别人。关键是你能从这看上去很粗糙的电影里边学会什么。两个男人,一个狠心危险,一个乖巧老实,让你选,你选哪个? 
   
  我就知道没看过电影的都得选乖乖仔黎明,好好看看吧,看完了估计就得有人觉得黑老大的爱情很伟大了。为了自己的女人安全不受牵连,太子可以杀人了之后远远离开她;为了自己的女人受伤后不觉得疼,太子可以去药店抢止疼药;为了自己的女人不被人欺负,他可以一身炸弹地去挑衅整个黑帮…… 
   
   黎明拿枪指着他:太子,你现在已经被整个香港通缉,你不要再做错事情。结果这个剽悍的男人,淡淡一笑,眼神犀利:我什么都会错,唯一没错的,就是对我的女人好。 
   
  电影看到这里,这个表面上危险的男人,让我想起西格夫里·萨松的一句诗句:我心中有一只老虎,它正在闻一朵玫瑰花(In me the tiger sniffe the rose)。也有人把它翻译成:心有猛虎,细嗅蔷薇。这个古惑仔,面对自己最爱的女人,顽劣凶狠的外表下,也有细腻柔情的一面。 
   
   古惑仔想得很简单,也许小时候妈妈无意间跟他说过一句:古人讲究海枯石烂我心不变,你长大了,要对自己的女人好。那么他就记了一辈子。再看看我们,成天文艺来文艺去,自以为声色犬马诗酒风流,写点小酸文,听首小骚歌,其实还不是自以为是的装逼扯淡。有时候,我们对爱情的理解真的还不如一个古惑仔直接简单接近本质。他没什么别的本事,他只是想对他爱的女人好。 
   
   张学友驾车赴死前那深情的回眸,让我为之动容。自己深爱的女人躺在自己的敌人的怀里,是何等的绝望和撕心裂肺。明月依旧,尖东依旧,你赢得了天下,输了她。 
   
   山川载不动太多悲哀,岁月经不起太长的等待。一个美丽的女人,在她最好的年华,有那么一个男人那样轰轰烈烈爱过她,甚至牺牲自己的生命,她真的够了,值了。尽管,身边一起慢慢变老的是另外一个男人。 
   
   突然想起这部电影的英文名字——With Or Without You。翻译的很传神。有你没你,这个世界,真的不一样。 
   
   爱说白了,就这么简单,无非是你对她好,她也对你好。所以,天底下的男人们,正在爱的,或是正要爱的,也许你是一个粗枝大叶不讲细节的男人,也许你是一个脾气很坏力气很大的男人,但请你把你不好的一面冲着你的敌人发泄,好么? 
   
   你身边的,是你最爱的女人。好好爱她,把你心中的老虎关到笼子里,而留给你的女人那盛开的最芬芳的蔷薇。 
   
   PS:电影看完,我真的很想为张学友饰演的太子唱一首歌:我想就这样牵着你的手不放开,爱可不可以简简单单没有伤害,你靠着我的肩膀,你在我胸口睡着,像这样的生活,我爱你,你爱我…… 
   
   PS之PS:关于演员,张学友绝对一流演技,别老觉得他只会唱歌;而黎明,这么多年,我总觉得他的表演少了点什么;关之琳的表演很出乎人意料,比她在黄飞鸿系列里的十三姨要好的多,就像另外一个大花瓶李嘉欣在王家卫的电影《堕落天使》里有超水平发挥一样;至于吴孟达,更不用说,钻石男配。

2008年9月25日星期四

品冠:低调着优雅

高三那年,我严重失眠,不是因为升学的压力,那对我构不成威胁,因为什么,我自己也不记得了,就不去探究了 ,切入正题。有天没事的时候,无意中翻到一张九几年的磁带,于是我睡觉之前就会一直听它,到自己意识模糊…里面有首《掌心》,无印良品的 ,那时候我并不熟悉他们,但由于那盘磁带,让我开始喜欢那里面一个低沉的男中音——品冠。
   上大学以后,经常上网,无意中会看到这个名字 ,于是我就会去随意去看看,本人保证,本人绝对不是一疯狂的人。后来上网的时候除了会偶尔看看他的消息,也会搜他的歌来听,不知道怎么了 ,我觉得他的歌很适合一个人的 时候听,听着就感觉到有一种说不出的哀伤,因为他的歌基本是情歌,是分手后的悲伤,也许女生就是容易被感动吧,像“陪你一起老”里低低地说着“很难过不能陪你一起老,再也没有机会看到你的笑…”;如“疼你的责任”里,他说“总觉得有疼你的责任要你是最快乐最单纯的人”我想那是所有女生的愿望吧,有个爱护自己的男友,逗你开心,陪你分享;还有“后来的我们”中,他很无奈地说:“后来的我们一直都遇不上,仿佛都在避开某一些地方…我们只是彼此幸福的转站”到 他最新专辑《爱到无可救药》里“下次再爱我”,“朋友变情人再变朋友”,两首不一样的歌却同样伤感着…
   当然新专辑里主打歌“无可救药”写的就比较欢快,至少看MV时男女主角是很幸福的,“哄我入睡”同样也很甜蜜……
   记得很多人问我为什么喜欢品冠,其实在我第一次看到他的笑的时候,我就觉得很温暖,我不知道为什么我会用温暖去形容他的笑,可是真的,当你很失落的时候,见到他的时候,你就会觉得很安心。他喜欢带一副“二丙”,很投入的去唱着他的情歌,看上去很斯文,有可能这也是我喜欢他的另一个原因吧!
   忘了再哪看到一个DJ是这样评价品冠的,她说“品冠:低调着优雅”,是,低调着优雅,品冠的出镜率不高,名气不似周董,但是他是优雅的,是安静的做他的音乐的,所以才会有人记住他,是谁说,品冠的歌是最好的疗伤药,是谁说他的声音能给人宁静……
    宿舍的人说,我喜欢的就是一类型的 ,当我说我喜欢王啸坤的时候,他们说,他和品冠很像,我没有看出来,在我心里,他们是不同的两个人,他们的风格也是全然不同,唯一相同的可能是他们都会抱着吉他安静的唱歌吧,一个是安静的情歌,一个是全摇滚。可是他们都是用心的歌者,唱着自己的心情,别人的经历,在城市里总能感动着一些人。
    也许,再过几年,我对他们的印象都会模糊,但是当那些熟悉的旋律再次转动的时候,我会记得我曾经喜欢过两个歌者,他们的歌陪着我走着不同的经历,在我的生命里不同的时间里……

2008年9月24日星期三

awk - 模式扫描与处理语言

awk - 模式扫描与处理语言

(第二版)

Alfred V. Aho
Brian W. Kernighan
Peter J. Weinberger

Bell Laboratories
Murray Hill, New Jersey 07974

译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务。
原文:http://cm.bell-labs.com/7thEdMan/vol2/awk

摘要

awk 是一门编程语言,它的基本操作是在一组文件上查找模式,并在包含这些模式实例的那些行或字段上进行指定的动作。awk 使得特定数据的选择和变换操作更易于表达;例如,awk 程序

length > 72

打印长度超过 72 个字符的所有输入行;程序

NF % 2 == 0

打印有偶数个字段的所有行;而程序

{ $1 = log($1); print }

把每行的第一个字段替代为它的对数。

awk 模式可以包括正则表达式和在字符串、数值、字段、变量、数组元素上的关系算符的任意的布尔组合。动作可以包括同在模式中一样的模式匹配构造,还有算术和字符串表达式与赋值,if-else、while、for 语句,和多个输出流。

本报告包含用户指南,awk 设计与实现的讨论,和一些计时统计。

September 1, 1978



1. 介绍

awk 是设计用来使很多常见的信息检索和文本操作任务易于陈述和进行的一门编程语言。

awk 的基本操作是依次扫描一组输入文件,查找匹配与用户已经指定的模式集合中的任何一个模式相匹配的行。对于每个模式,都可以指定一个动作;这个动作将在匹配这个模式每一行上进行。

尽管读者熟悉的 UNIX ® 程序 grep 也认可这种方式,在 awk 中的模式可能比 grep 中的模式更加一般性,而且允许的动作比只是打印匹配的行更加复杂。例如,awk 程序

{print $3, $2}

依次打印一个表格的第三和第二列。程序

$2 ~ /A|B|C/

打印在第二列是 A、B 或 C 的所有输入行。程序

$1 != prev { print; prev = $1 }

打印第一个字段不同于前面的第一个字段的所有的行。

1.1. 用法

命令

awk  program  [files]

在指名的一组文件上,或标准输入上、如果没有指定文件的话,执行字符串 program 中的 awk 命令。语句也可以放置到一个文件 pfile 中,并用如下命令执行。

awk  -f pfile  [files]

1.2. 程序结构

awk 程序是如下形式的语句序列:


模式 { 动作 }
模式 { 动作 }
...

输入的每行都要依次针对每个模式做匹配。对于每个匹配的模式,执行相关的动作。在所有模式都已经测试过了的时候,取回下一行并从头开始做匹配。

模式或动作二者都可以但不能同时省略。如果一个模式没有动作,简单的把匹配的行复制到输出。(所以匹配多个模式的行可能被打印多次)。如果一个动作没有模式,则这个动作在所有输入上进行。不匹配模式的行被忽略。

因为模式和动作都是可选的,动作必须被包围在花括号中来区别于模式。

1.3. 记录和字段

awk 输入被分解成了终止于记录分隔符的“记录”。缺省的记录分隔符是换行,所以缺省的 awk 一次处理它的输入中的一行。当前记录的数可在命名为 NR 的变量中得到。

每个输入记录被当作分解成了“字段”。字段通常用空白也就是空格或 tab 来分隔,但是输入字段分隔符是可以变更的,这在后面会有所描述。字段被引用为 $1、$2 ,以此类推。这里的$1 是第一个字段,而 $0 是整个输入记录自身。字段可以被赋值。在当前记录中字段的数目可以在命名为 NF 的变量中得到。

变量 FS 和 RS 分别指定输入字段和记录分隔符;它们可以在任何时候被改变为任何的单一字符。也可以使用可选的命令行参数 −Fc 来设置 FS 为字符 c。

如果记录分隔符为空,把空输入行作为记录分隔符,并把空格、tab 和换行作为字段分隔符处理。

变量 FILENAME 包含当前输入文件的名字。

1.4. 打印

一个动作可以没有模式,在这种情况下动作在所有行上执行。最简单的动作是打印某些或所有的记录;这可以通过 awk 命令 print 来完成。awk 程序

{ print }

打印每个记录,也就是把输入完好的复制到输出。更有用的是打印来自每个记录的一个字段或某些字段。例如

print $2, $1

按逆序打印前两个字段。在 print 语句中用逗号分隔的项,在输出的时候会用当前输出字段分隔符分隔开。没有用逗号分隔的项会串联起来,所以

print $1 $2

把第一个和第二个字段合在一起。

可以使用预定义的变量 NF 和 NR;例如

   { print NR, NF, $0 }

打印出前导了记录数和字段数的每个记录。

输出可以被转向到多个文件中;程序

   { print $1 >"foo1"; print $2 >"foo2" }

写第一个字段 $1 到文件 foo1 中,写第二个字段到文件 foo2 中。还可以使用 >> 符号:

   print $1 >>"foo"

添加输出到文件 foo。(在每种情况下,输出文件都在必要时建立)。文件名可以是一个变量或字段,同常量一样;例如

   print $1 >$2

使用字段 2 的内容作为文件名字。

自然的,有对输出文件数目的限制,目前是 10 个。

类似的,输出可以用管道导入到(只在 UNIX 上的)其他进程;例如,

   print |  "mail bwk"

把输入邮递给 bwk。

可以使用变量 OFS 和 ORS 来改变当前输出字段分隔符和输出记录分隔符。输出记录分隔符被添加到 print 语句的输出后面。

awk 还提供 printf 语句用于输出格式化:

   printf format expr, expr, ...

依据在 format 中的规定格式化在列表中的表达式并打印它们。例如,

   printf "%8.2f  %10ld\n", $1, $2

打印 $1 为 8 位宽的小数点后有两位的浮点数,打印 $2 为 10 位长的长十进制数,并跟随着一个换行。不自动生成输出分隔符;你必须自己增加它们,如这个例子那样。这个版本的printf 同于 C 语言所使用的。


2. 模式

在动作之前的模式充当决定一个动作是否执行的选择者。有多种多样的表达式可以被用做模式: 正则表达式,算术关系表达式,字符串值的表达式,和它们的任意的布尔组合。

2.1. BEGIN 和 END

特殊模式 BEGIN 匹配输入的开始,在第一个记录被读取之前。模式 END 匹配输入的结束,在最后一个记录已经被处理之后。BEGIN 和 END 从而提供了在处理之前和之后获得控制的方式,用来做初始化和总结。

作为一个例子,可以如下这样把字段分隔符设置为冒号

BEGIN { FS = ":" }
... 余下的程序 ...

或如下这样输出输入行的计数

END  { print NR }

如果 BEGIN 出现,它必须是第一模式;END 必须是最后一个模式,如果用到了的话。

2.2. 正则表达式

最简单的正则表达式是包围在斜杠内的文字的字符串,如

/smith/

这实际上是个完整的 awk 程序,它将打印包含名字“smith”的任何出现的所有行。如果一行包含“smith”作为一个大单词的一部分,它也会被打印,比如

blacksmithing

awk 正则表达式包括在 UNIX 文本编辑器 ed 和 grep 中能找到的正则表达式形式(没有后引用)。此外同 lex 一样,awk 允许采用圆括号用做组合,| 用做选择,+ 用做“一或多个”,?用于“零或一个”。字符类可以简写: [a−zA−Z0−9] 是所有字母和数字的集合。作为例子,awk 程序

/[Aa]ho|[Ww]einberger|[Kk]ernighan/

将打印包含名字“Aho”、“Weinberger”或“Kernighan”中任何一个、不论首字母是否大写的所有行。

(带有上述扩展的)正则表达式必须包围在斜杠中,同 ed 和 sed 一样。在正则表达式内,空白和正则表达式元字符是有意义的。要去掉某个正则表达式字符的特殊意义,可前导一个反斜杠。一个例子模式

/\/.*\//

它匹配包围在斜杠内的任何字符串。

你还可以通过算符 ~ 和 !~ 指定任何字段或变量匹配(或不匹配)一个正则表达式。程序

$1 ~ /[jJ]ohn/

打印第一个字段匹配“john”或“John”的所有行。注意它还会匹配“Johnson” 和“St. Johnsbury”等等。要精确的限制它为 [jJ]ohn,使用

$1 ~ /^[jJ]ohn$/

这个脱字符号 ^ 指称一行或一个字段的开始处;美元号 $ 指称结束处。

2.3. 关系表达式

awk 模式可以是涉及常用的关系算符 <、<=、==、!=、>=、> 的关系表达式。 例子

$2 > $1 + 100

它选择第二个字段至少比第一个字段大 100 的行。类似的

NF % 2 == 0

打印有偶数个字段的行。

在关系测试中,如果操作数(operand)都不是数值,则做字符串比较;否则做数值比较。所以

$1 >= "s"

选择开始于 s、t、u 等字符的行。在缺乏任何其他信息的情况下,字段被当作字符串,所以程序

$1 > $2

将进行字符串比较。

2.4. 模式的组合

模式可以是模式的使用算符 ||(或)、&&(与)和 !(非)的任意布尔组合。例如

$1 >= "s" && $1 < "t" && $1 != "smith"

选择第一字段开始于“s”而不是“smith”的行。&& 和 || 保证它们的操作数会被从左至右的求值;在确定了真或假之后求值立即停止。

2.5. 模式范围

选择一个动作的“模式”还可以由用逗号分隔的两个模式组成,比如

pat1,{ ... } pat2

在这种情况下,这个动作在 pat1 的一个出现和 pat2 的下一个出现之间(包含它们)的每个行上进行。例如,

/start/, /stop/

打印在 start 和 stop 之间的所有行。而

NR == 100, NR == 200 { ... }

在输入的从 100 到 200 的行上进行这个动作。


3. 动作

awk 动作是用换行或分号终止的动作语句的序列。这些动作语句可以被用来做各种各样的簿记和字符串操纵任务。

3.1. 内置函数

awk 提供了一个“长度”函数来计算字符串的长度。下面这个程序打印每个记录,每个都前导它的长度:

{print length, $0}

length 自身是个“伪变量”,它生成当前记录的长度;length(参数)生成它的参数的长度,下面的程序等价于上个程序

{print length($0), $0}

参数可以是任何表达式。

awk 还提供算术函数 sqrt、log、exp 和 int,分别得到它们参数的平方根、自然对数、指数和整数部分。

某个内置函数的名字,不带有参数或圆括号,表示这些函数在整个记录上的值。程序

length <> 20

打印长度小于 10 或大于 20 的行。

函数 substr(s, m, n) 生成 s 的开始于位置 m(起始于 1)的最多 n 个字符长的子串。如果省略了 n,子串到达 s 的结束处。函数 index(s1, s2) 返回字符串 s2 在 s1 出现的位置,如果未出现则为零。

函数 sprintf(f, e1, e2, ...) 在 f 指定的 printf 格式中生成表达式 e1、e2 等的值。所以例子

x = sprintf("%8.2f %10ld", $1, $2)

设置 x 为格式化 $1 和 $2 的值所生成的字符串。

3.2. 变量、表达式和赋值

awk 变量依据上下文而被接纳为数值(浮点数)或字符串值。例如

x = 1

x 明显的是个数,而

x = "smith"

明显的是个字符串。在上下文需要的时候,把字符串转换为数或反之。例如

x = "3" + "4"

把 7 赋值给 x。在数值上下文中,不能被解释为数的字符串一般会有为零的数值,但是依靠这种行为是愚蠢的。

缺省的,(不是内置的)变量被初始化为空字符串,它有为零的数值;这消除了大多数对 BEGIN 段落的需要。例如,前两个字段的总和可以用下列程序计算

{ s1 += $1; s2 += $2 }
END { print s1, s2 }

算术在内部以浮点数的方式计算。算术算符有 +、-、*、/、%(模)。C 语言的增加 ++ 和减少 −− 算符也可用,还有赋值算符 +=、-=、*=、/=、%=。这些算符都可以用于表达式中。

3.3. 字段变量

awk 中的字段在本质上享有变量的所有性质 — 他们可以用在算术或字符串运算/操作中,并可以被赋值。所以你可以把第一个字段替代为一个序号,比如:

{ $1 = NR; print }

或累计前两个字段到第三个字段中,比如:

{ $1 = $2 + $3; print $0 }

或把一个字符串赋值到一个字段:

{ if ($3 > 1000)
$3 = "too big"
print
}

它把第三个字段替代为“too big”,在它很长的时候,并在这种情况下,打印这个记录。

字段引用可以是数值表达式,比如

{ print $i, $(i+1), $(i+n) }

一个字段被认为是数值还是字符串依赖于上下文;在有歧义的情况下比如

if ($1 == $2) ...

字段被当作字符串。

每个输入行都在需要的时候被自动分解到字段。还可以把任意变量或字段分解到字段:

n = split(s, array, sep)

把字符串 s 分解到 array[1], ..., array[n]。返回找到的元素数目。如果提供了 sep 参数,则把它用做字段分隔符;否则使用 FS 作为分隔符。

3.4. 字符串连接

字符串可以被串接。例如

length($1 $2 $3)

返回前三个字段的长度。还有在 print 语句中

print $1 " is " $2

打印用“ is ”分隔的两个字段。变量和数值表达式也可以在连接中出现。

3.5. 数组

数组元素不用声明;在被提及到的时候才导致它的存在。下标可以有任何非空的值,包括非数值的字符串。作为常规的数值下标的例子,语句

x[NR] = $0

把当前输入记录赋值到数组 x 的第 NR 个元素。实际上,在原理上(尽管可能很慢)用 awk 程序按随机的次序处理整个输入是可能的

{ x[NR] = $0 }
END {
... 程序 ... }

第一动作只是把每个输入行记录到数组 x 中。

数组元素可以用非数值的值来命名,这给予 awk 非常象 Snobol 语言的关联内存表的能力。假设输入包含的字段带有象 apple、orange 等等这样的值。则程序

/apple/ { x["apple"]++ }
/orange/ { x["orange"]++ }
END { print x["apple"], x["orange"] }

增加指名的数组元素的计数,并在输入结束时打印它们。

3.6. 控制流语句

awk 提供了同 C 语言一样的基本控制流语句 if-else、while、for,和使用花括号的语句组合。我们在章节 3.3 展示了 if 语句而没有描述它。求值在圆括号中的条件;如果为真,则执行在跟随在 if 后面的语句。else 部分是可选的。

while 语句完全同 C 语言的一样。例如,要一行一个打印所有输入字段

i = 1
while (i <= NF) {
print $i
++i
}

for 语句也完全同 C 的一样:

for (i = 1; i <= NF; i++)
print $i

同上面的 while 语句做同样的工作。

for 语句还有一种可选的形式,它适合于访问关联数组的元素:

for (i in array)
语句

把 i 依次设置为 array 的每个元素并重复执行后面的语句。元素是按明显的随机次序访问的。如果在循环期间 i 被改变了,或者访问了新元素,就会出现混乱。

在 if、while、for 的条件部分中的表达式可以包括关系算符如 <、<=、>、>=、==(“等于”)、!=(“不等于”);带有匹配算符 ~ 和 !~ 表示匹配的正则表达式;逻辑算符 ||、&& 和!;当然还有用于组合的圆括号。

break 语句导致从围绕它 while 或 for 中立即退出,continue 语句导致开始下一次重复。

next 语句导致立即跳转到下一个记录并从头开始扫描模式。exit 语句导致程序表现得如同已经到达了输入的结束。

在 awk 程序中可以放置注释: 它们开始于字符 # 并结束于本行的结束处。比如

print x, y # 这是一个注释

4. 设计

UNIX 系统已经提供一些程序,它们通过传递输入经过某种选择机制而进行操作。grep 是最早和最简单的,它只打印匹配一个单一的指定模式的所有行。egrep 提供了更一般的模式,就是说,完全一般性的正则表达式;fgrep 通过特别快的算法查找关键字的集合。

sed 提供了编辑器 ed 的大多数编辑设施,并应用于输入流之上。这些程序都不提供数值功能、逻辑关系或变量。

lex 提供了一般性的正则表达式的识别能力,并充当 C 程序生成器,在能力上是没有限制的。但使用 lex 需要 C 编程的知识,并且 lex 程序必须必须在使用之前编译和装载,所以不鼓励在简短的应用中使用。

awk 尝试填充可能性矩阵中的空白。它提供了一般性的正则表达式能力和隐含的输入/输出循环。它还提供方便的数值处理、变量、更一般性的选择和在动作中的控制流。它不需要编译和 C 语言知识。最后,awk 提供了访问行中字段的方便的方式;在这方面它是唯一的。

awk 还尝试完全整合字符串和数值,通过把所有数量都作为既是字符串又是数处理,尽可能晚的确定哪个表示是合适的。在大多数情况下用户可以简单的忽略这种区别。

开发 awk 的多数努力在于确定 awk 应该做什么与不应该做什么(例如,它不做字符串替换),和应当采用什么语法(没有显式的连接算符),而不是书写和调试代码。我们尝试使语法强力但易于使用并适于扫描文件。例如,缺乏声明和隐含的初始化,尽管对于通用编程语言是个坏主意,但对意图用于甚至是在命令行上合成的小程序的一门语言而言是需要的。

在实践中,awk 的使用适合两个广泛的范畴。其一可以叫做“报表生成”— 处理一个输入,提取计数,总和等。这也包括写琐碎的数据验证程序,比如校验一个字段只包含数值信息或特定分界符是正确配对的。文本和数值处理的组合在这种情况下是没有价值的。

第二个用途是做数据转换器,从一个程序生成的一种形式转换成另一个程序期望的另一种形式。最简单的例子只是选择字段,可能再做些重新安排。


5. 实现

awk 语言的实际实现利用了 UNIX 操作系统上可用的开发工具。文法使用 yacc 规定;词法分析使用 lex;正则表达式识别器是直接从这些表达式构造出来的确定有限自动机。awk 程序被翻译成一个分析树,并接着直接用一个简单的解释器执行它。

awk 是为易于使用而不处理速度而设计;变量类型的延迟评估和分解到字段的需要使在任何情况下都难于达到高速。尽管如此,程序不是慢得不能工作。

下面的表 I 展示了在 PDP-11/70 上 UNIX 程序 wc、grep、egrep、fgrep、sed、lex 和 awk 在下列简单任务上的执行(用户+系统)时间:

  • 1. 计数行数。
  • 2. 打印包含“doug” 的所有行。
  • 3. 打印包含“doug”、 “ken” 或“dmr”的所有行。
  • 4. 打印每行的第三个字段。
  • 5. 依次打印每行的第三和第二个字段。
  • 6. 分别把包含“doug”、“ken”和“dmr”的所有行添加到文件“jdoug”、“jken”和 “jdmr”。
  • 7. 打印每行并前导上“行号 :”。
  • 8. 总和一个表的第四列。

程序 wc 只计数它输入中的字、行和字符;其他的我们都提到过。在所有情况下,输入都是使用命令 ls −l 建立的包含 10,000 行的文件;每行都有如下形式

-rw-rw-rw- 1 ava 123 Oct 15 17:05 xxx

这个输入的总长度是 452,960 个字符。lex 的时间不包括编译和装载。

如同预期的一样,awk 不如特殊工具 wc、sed 或 grep 家族程序那么快,但是比更一般性的工具 lex 要快。在所有情况下,这些任务表达为 awk 程序同表达为其他语言一样容易;涉及字段的任务相当易于表达为 awk 程序。某些测试程序同时用 awk、sed 和 lex 展示。

任务

程序12345878
wc8.6






grep11.713.1





egrep6.211.511.6




fgrep7.713.816.1




sed10.211.615.829.030.516.1

lex65.1150.1144.267.370.3104.081.792.8
awk15.025.629.933.338.946.471.431.1

表 I. 程序的执行时间。(单位是秒)

下面展示完成某些任务的程序。lex 程序一般长得难以展示。

awk:

1. END {print NR}
2. /doug/
3. /ken|doug|dmr/
4. {print $3}
5. {print $3, $2}
6. /ken/ {print >"jken"}
/doug/ {print >"jdoug"}
/dmr/ {print >"jdmr"}
7. {print NR ": " $0}
8. {sum = sum + $4}
END{print sum}

SED:


1. $=
2. /doug/p
3. /doug/p
/doug/d
/ken/p
/ken/d
/dmr/p
/dmr/d
4. /[^ ]* [ ]*[^ ]* [ ]*\([^ ]*\) .*/s//\1/p
5. /[^ ]* [ ]*\([^ ]*\) [ ]*\([^ ]*\) .*/s//\2 \1/p
6. /ken/w jken
/doug/w jdoug
/dmr/w jdmr

LEX:

1. %{
int i;
%}
%%
\n i++;
. ;
%%
yywrap() {
printf("%d\n", i);
}
2. %%
^.*doug.*$ printf("%s\n", yytext);
. ;
\n ;

引用

1. K. Thompson and D. M. Ritchie, UNIX Programmer’s Manual, Bell Laboratories (May 1975). Sixth Edition

2. B. W. Kernighan and D. M. Ritchie, The C Programming Language, Prentice-Hall, Englewood Cliffs, New Jersey (1978).

3. M. E. Lesk, “Lex — A Lexical Analyzer Generator,” Comp. Sci. Tech. Rep. No. 39, Bell Laboratories, Murray Hill, New Jersey (1975).

4. S. C. Johnson, “Yacc — Yet Another Compiler-Compiler,” Comp. Sci. Tech. Rep. No. 32, Bell Laboratories, Murray Hill, New Jersey (July 1975).

rsey (July 1975).

 原文地址 http://cm.bell-labs.com/7thEdMan/vol2/awk

2008年9月8日星期一

人生中少走弯路的10条忠告

1. 买个闹钟,以便按时叫醒你。
  贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。“闹钟”只是一种简单的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。

 2. 如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。
  初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。


3. 每个人都有孤独的时候。
 要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环境,面对形形色色的人和事,一下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。


4. 走运时要做好倒霉的准备。
  有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。 

5. 不要像玻璃那样脆弱。
  有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的沙粒。

 6. 管住自己的嘴巴。
  不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短处,这些会降低你的人格。

 7. 机会从不会“失掉”,你失掉了,自有别人会得到。
  不要凡事在天,守株待兔,更不要寄希望于“机会”。机会只不过是相对于充分准备而又善于创造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的“倒霉鬼”给抓住了。没有机会,就要创造机会,有了机会,就要巧妙地抓住。

 8. 若电话老是不响,你该打出去。
  很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。

 9. 千万不要因为自己已经到了结婚年龄而草率结婚。
  想结婚,就要找一个能和你心心相印、相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大。

10. 写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。
  人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子。
 

2008年8月24日星期日

【转载】Niubility 英语教程

昨晚xijing给我发来niubility的时候,一头雾水,后来看到这个文章后,实在感觉很有意思,转过来大家分享!

网上传这么一句话,相当受欢迎:
Many people think they are full of niubility, and like to play zhuangbility, which only reflect their
shability.
可见本国人民对于英语的热忱已经到了相当大的程度,本教程的目的旨在更好地指导大家使用这几个词的用法。
本教程首先对于niubility, zhuangbility, shability这几个词的正确拼写作出以下修改建议:


niubility:正确拼写应为newbility,名词
zhuangbility:正确拼写为drunbility,名词
shability:保持原拼写方式,名词
下面对几个词的词性作一下延展:

drunbility

1、drunbility的词根为drunb,动词,装逼的原意
进行时:drunbing;过去时:drunbed;完成时:have drunbed
例句:BBTV is drubing again during our dinner time, it has drunbed for many years since I have TV.
BBTV又在晚饭时间装逼了,它自从我有电视起就在装逼已经这么多年了。

2、drunbee:名词,装逼的人,有装逼倾向的人
例句:林志玲 is a drunbee, but my father likes her, which is disgusting.
林志玲是个装逼的人,但是偶爸爸喜欢她,真恶心。

3、druber:名词,以装逼为职业的人,专业装逼者
例句:朱军 is a drunber, he has been drunbing all his life, who is professional.
朱军是个职业装逼者,他一辈子都在装逼,是专业级的。

4、drunby:形容词,装逼的
例句:The way you playing music by your mobile phone on a bus is very drunby, not mention the song is 求佛.
你在公交车上用手机放音乐是很装逼的,更别说那歌是求佛。

5、drunblization:名词,装逼化
例句:As more and more Starbucks running in China, the drunblization is getting worse and worse.
随着越来越多的星巴克在中国运营,人民装逼化也越来越严重了。

6、drunblism:名词,装逼主义
例句:The revolution of drublism in France starts in 1863, and people seems respecting that.
法国装逼主义运动起源于1863年,人们貌似很崇拜。

newbility

1、newbility词根为newby,形容词,原意为牛逼
例句:I think the song named 你是我的玫瑰我是你的花 is very newby.
我认为那首你是我的玫瑰我是你的花很牛逼。

比较级:newbier;最高级:newbiest
例句:There is no newbiest, only newbier.
没有最牛逼,只有更牛逼。

2、newber:名词,牛逼的人
例句:王小波 is a newber, and 罗永浩 is also a newber.
王小波是个牛逼的人,罗永浩也是各牛逼的人。

3、newbable:形容词,可以牛逼的,值得牛逼的
例句:I think the cup of 34E is newbable, you should be proud.
我认为34E的罩杯很值得牛逼,你应该自豪。

4、newbilization:名词,牛逼化
例句:The newbilization of white collar is a global problem.
白领牛逼化是个全球性的问题。

shability

1、shability词根为shaby,名词,傻~~~逼
例句:周杰伦 thinks 崔健 is a shaby, which turns out 周 is the real big shaby.
周杰伦认为崔健是傻~~~逼,结果周才是真正的大傻~~~逼。

2、shability,名词,傻~~~逼能力
例句:The power of your shability is as damagable as the earthquake.
你傻~~~逼的能力犹如地震一样具有毁灭性。

3、shabilization,名词,傻~~~逼化
例句:The BBTV news causes the citizen shabilization.
BBTV的新闻导致国民傻~~~逼化。

课后作业:
一、翻译句子
1、日本的傻~~~逼化进程已经完成,傻~~~逼比例与傻~~~逼能力均是世界第一的。
2、姜文的电影很牛逼,他是一个牛逼的人,希望中国电影都能牛逼化。
3、广电总局是个傻~~~逼的机构,但总认为自己是最牛逼的。
4、装逼难,做一个装逼人更难,做一个职业装逼者难上加难,但是朱军做到了。

二、单词填空(运用所有上文出现过的单词)
1、The wirter of this tutorial is very ___________.
2、The picture of 陈冠希 and 阿娇 in bed is totally ________________.
3、芙蓉姐姐 is a symbol of __________, and she is a ________.

三、发散思维练习(供学有余力的同学选做)
扩展erbility,nengbility,lanbility,qiongbility等词汇