隨筆-314  評(píng)論-209  文章-0  trackbacks-0

          Python語(yǔ)法簡(jiǎn)單,而且通過(guò)縮進(jìn)的方式來(lái)表現(xiàn)層次結(jié)構(gòu),代碼非常簡(jiǎn)明易懂,對(duì)初學(xué)者來(lái)說(shuō),比較容易上手。

          Perl的模式匹配非常強(qiáng)大,同時(shí)匹配的符號(hào)有很多種,難以閱讀和維護(hù)。

          在文本處理方面,python通過(guò)加載re模塊來(lái)實(shí)現(xiàn)模式匹配的查找和替換。而Perl內(nèi)置就有模式匹配功能。

          note:內(nèi)置命令和外部命令的區(qū)別。

          通過(guò)代碼來(lái)直接做比較。

          python版:

          #!/usr/bin/python
          import re
          import fileinput
          exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I)
          location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I)
          for line in fileinput.input():
              fn = fileinput.filename()
              currline = line.rstrip()
              mprev = exists_re.search(currline)
              if(mprev):
                  xlogtime = mprev.group(1)
              mcurr = location_re.search(currline)
              if(mcurr):
                  print fn, xlogtime, mcurr.group(1)
          

          Perl版:

          #!/usr/bin/perl
          while (<>) {
              chomp;
              if (m/^(.*?) INFO.*Such a record already exists/i) {
                  $xlogtime = $1;
              }
              if (m/^AwbLocation (.*?) insert into/i) {
                  print "$ARGV $xlogtime $1\n";
              }
          }
          

          time process_file.py *log  > summarypy.log

          real   0m8.185s

          user  0m8.018s

          sys    0m0.092s

          time process_file.pl  *log > summaypl.log

          real    0m1.481s

          user   0m1.294s

          sys     0m0.124s

          在文本處理方面,Perl 比Python快8倍左右

          所以在處理大文件如大日志方面,用perl更好,因?yàn)楦臁?/p>

          如果對(duì)速度要求不是很嚴(yán)格的話,用python更好,因?yàn)閜ython簡(jiǎn)潔易懂,容易維護(hù)和閱讀。

          為什么在文本處理時(shí),Perl比Python快很多呢?

          這是因?yàn)镻erl的模式匹配是其內(nèi)置功能,而Python需要加載re模塊,使用內(nèi)置命令比外部命令要快很多。

          內(nèi)置命令和外部命令的區(qū)別

          Linux命令有內(nèi)置命令和外部命令之分,功能基本相同,但是調(diào)用有些細(xì)微差別。
          內(nèi)置命令實(shí)際上是shell程序的一部分,其中包含的是一些簡(jiǎn)單的linux系統(tǒng)命令,這些命令在shell程序識(shí)別并在shell程序內(nèi)部完成運(yùn)行,通常在linux系統(tǒng)加載運(yùn)行時(shí)shell就被加載并駐留在系統(tǒng)內(nèi)存中。內(nèi)部命令是設(shè)在bash源代碼里面的,其執(zhí)行速度比外部命令快,因?yàn)?strong>解析內(nèi)部命令shell不需要?jiǎng)?chuàng)建子進(jìn)程,比如exit,cd,pwd,echo,history等。
          外部命令是linux系統(tǒng)中的實(shí)用應(yīng)用程序,因?yàn)閷?shí)用程序的功能通常比較強(qiáng)大,其包含的程序量也很大,在系統(tǒng)加載的時(shí)候并不隨系統(tǒng)一起被加載到內(nèi)存中,而是在需要的時(shí)候才將其調(diào)入內(nèi)存。通常外部命令的實(shí)體并不包含在shell中,但是其命令執(zhí)行過(guò)程是由shell程序控制的。shell程序管理外部命令執(zhí)行的路徑查找,加載存放,并控制命令的執(zhí)行。外部命令是在bash之外額外安裝的,通常放在/bin, /usr/bin, /sbin,  /usr/sbin,....等。

          用type命令可以分辨內(nèi)部命令與外部命令。


          posted on 2015-11-26 23:15 xzc 閱讀(1588) 評(píng)論(0)  編輯  收藏 所屬分類: linux/unix
          主站蜘蛛池模板: 阳西县| 淮滨县| 开江县| 兴文县| 阿尔山市| 峡江县| 石台县| 榆中县| 清流县| 应城市| 伊吾县| 宝山区| 丰顺县| 曲沃县| 永和县| 金山区| 静乐县| 望奎县| 沛县| 泗水县| 芦溪县| 正定县| 南宫市| 辉南县| 临夏市| 米脂县| 东乌珠穆沁旗| 锡林郭勒盟| 罗城| 清涧县| 北安市| 化隆| 年辖:市辖区| 巍山| 江阴市| 白朗县| 循化| 宜都市| 灵台县| 怀柔区| 东乌|