参加了LINUX培训,最近新学SHELL编程,严格来说应该是BASH编程.以前总觉得这些编程都一样的,一样的结构,一样的分支,循环.但实际拿BASH 来做事的时候才知道,一样的语句,执行起来,简单天上地下!
首先来说个简单的例子,time awk 'BEGIN{for(i=0;i<100000;i++){print "helloworld"}}' 这个6秒多 ,用BASH的FOR循环要8秒,用PERL,0.8秒.一样的结果 一样的代码,执行起来差别很大.再说我们用来做事,处理APACHE的
日志.apache的日志要导入到MYSQL里做统计,就要处理,调整下顺序,把英文的月份改成中文的,老师只给了我们500M的一个日志.叫我们处理,老师的写法是AWK 排序管道给SED 替换.我用了WHILE READ 处理 中间用的SED处理,可我的处理的速度是每分钟处理2M.我去问老师的要多长时间,他的处理完只要了50多秒.这个差别太大了,最后我只用AWK处理了下,只用了40多秒.论坛上有人提出个面试题,一个2G的文件,找出里面出现单词最多的前10个,这个问题我一直在想,以前想的是用BASH 现在我已经不这么想了,那是不可能实现的,论坛上很多人写出了自己的代码,无非AWK ' '|SED ''|SORT|UNIQ |SORT 这样的形式,awk,sed行处理的,处理多大文件都没问题 ,但SORT不行了吧,我SORT 40M的文件用了 7分钟,2G要多长时间?
所以我想说谈SHELL(BASH)编程只是个笑话,BASH连最基本的正则表达式都解释不了,还要靠老牌的AWK,SED,GREP,仔细看看系统自带的最大的脚本RC.sysinit.如果去掉里面的AWK,和SED,你看看这个脚本还有什么,只是一堆命令序列而已,与编程有什么关系呀!SHELL就是SHELL,就是命令解释.编程还是学专门的编程语言吧. |