隨筆-314  評論-209  文章-0  trackbacks-0

          Python語法簡單,而且通過縮進的方式來表現(xiàn)層次結(jié)構(gòu),代碼非常簡明易懂,對初學者來說,比較容易上手。

          Perl的模式匹配非常強大,同時匹配的符號有很多種,難以閱讀和維護。

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

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

          通過代碼來直接做比較。

          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更好,因為更快。

          如果對速度要求不是很嚴格的話,用python更好,因為python簡潔易懂,容易維護和閱讀。

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

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

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

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

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


          posted on 2015-11-26 23:15 xzc 閱讀(1578) 評論(0)  編輯  收藏 所屬分類: linux/unix
          主站蜘蛛池模板: 蒙城县| 阿合奇县| 商河县| 许昌市| 石柱| 子洲县| 东海县| 修武县| 叶城县| 睢宁县| 台前县| 灵璧县| 常熟市| 大安市| 太仆寺旗| 巴林右旗| 江城| 巧家县| 海南省| 万载县| 万全县| 资阳市| 望江县| 灵寿县| 武隆县| 天镇县| 乐至县| 固阳县| 招远市| 高雄市| 灵璧县| 揭阳市| 宁武县| 霍山县| 仁寿县| 青川县| 德阳市| 弥渡县| 伊吾县| 晋宁县| 临武县|