shell腳本做文本解析同php和python比哪個效率更高?

shell中有很多強大的命令,比如awk、sort、grep等,這些命令的執行效率同php和python這樣的語言實現相比哪個更高呢?


普通功能,shell的效率高,因為這些經典命令內部大多是C/C++實現的。

但在一些偏僻或者複雜功能中,限於這些命令本身的功能,需要「曲線救國」,反覆倒騰數據才能達到最終結果。

這時候,直接用php、python,速度就更快。


伺服器上臨時分析一些日誌數據的時候基本都是awk sort grep uniq sed之類,性能帥得很。

如果是長期需要處理的功能,一般都會做成php或者python腳本,多數會丟crontab里運行去。

量級不大的時候,開發效率、可維護性往往比性能更重要。 當性能更重要時,shell php python這些都不是好選擇。 hadoop之類的並行計算方案會更靠譜,畢竟單位節點的計算能力是很容易觸頂的。


N年前為了每天分析數十GB的日誌,正好做過測試。測試是在Linux環境下(Redhat ES 3),測試處理一個數百兆的日誌文件進行匯總分析(郵件日誌),分別用C, Perl, Python,Shell做同樣的處理。處理速度排名是C&>&>Perl&>python&>shell。C是最快的,比別的快上至少一個數量級;其次是Perl,畢竟是為文本處理而生,最強的內置正則表達式;Python比Perl慢了點,記得速度是Perl的60%左右;shell最慢,雖然sed, grep,awk都不慢(其實都是C寫的),但通過shell組合在一起效率還是差了不少。


處理的數據量較小的情況下,一般使用 shell。功能齊全,信手拈來,很方便,速度也很快。

在數據量較大的情況下就建議用高級語言了。如果是重複性的記得寫成腳本,方便復用。

數據量大可能會導致出錯以及性能問題,之前就遇到過一個問題,將一個文件作為查詢條件用grep在另一個文件中查找,死活查不出來的情況...還有一個更奇葩,幾百萬行的一個文本用 uniq 去重之後還是各種重複。。。


推薦閱讀:

10min手寫(一):伺服器內存監控系統
為什麼 x in range(1000000000000001) 的執行速度這麼快
如何看待將Python代碼轉換成Go代碼並進一步編譯的 Grumpy 項目?
基於ArcGIS的python編程:2.python基礎(一)

TAG:Python | PHP | Shell編程開發 |