shell指令碼做文本解析同php和python比哪個效率更高?
來源:互聯網
上載者:User
shell中有很多強大的命令,比如awk、sort、grep等,這些命令的執行效率同php和python這樣的語言實現相比哪個更高呢?
回複內容:
N年前為了每天分析數十GB的日誌,正好做過測試。測試是在Linux環境下(Redhat ES 3),測試處理一個數百兆的記錄檔進行匯總分析(郵件日誌),分別用C, Perl, Python,Shell做同樣的處理。處理速度排名是C>>Perl>python>shell。C是最快的,比別的快上至少一個數量級;其次是Perl,畢竟是為文本處理而生,最強的內建Regex;Python比Perl慢了點,記得速度是Perl的60%左右;shell最慢,雖然sed, grep,awk都不慢(其實都是C寫的),但通過shell組合在一起效率還是差了不少。伺服器上臨時分析一些日誌資料的時候基本都是awk sort grep uniq sed之類,效能帥得很。
如果是長期需要處理的功能,一般都會做成php或者python指令碼,多數會丟crontab裡運行去。
量級不大的時候,開發效率、可維護性往往比效能更重要。 當效能更重要時,shell php python這些都不是好選擇。 hadoop之類的並行計算方案會更靠譜,畢竟單位節點的計算能力是很容易觸頂的。處理的資料量較小的情況下,一般使用 shell。功能齊全,信手拈來,很方便,速度也很快。
在資料量較大的情況下就建議用進階語言了。如果是重複性的記得寫成指令碼,方便複用。
資料量大可能會導致出錯以及效能問題,之前就遇到過一個問題,將一個檔案作為查詢條件用grep在另一個檔案中尋找,死活查不出來的情況...還有一個更奇葩,幾百萬行的一個文本用 uniq 去重之後還是各種重複。。。普通功能,shell的效率高,因為這些經典命令內部大多是C/C++實現的。
但在一些偏僻或者複雜功能中,限於這些命令本身的功能,需要“曲線救國”,反覆倒騰資料才能達到最終結果。
這時候,直接用php、python,速度就更快。