Re: [問題] perl or awk

作者: Neisseria (Neisseria)   2015-05-08 10:54:42
※ 引述《gecer (gecer)》之銘言:
: 小弟初學 方向是處理大資料(一份至少500MB的txt log)
: 最近google awk 和 perl的比較 發現有awk 執行速度比較快得說法
: 但是又聽說perl 處理字串比較有效率
: 想請教如果處理大資料使用哪種語言比較適合?
500MB 的資料應該沒有大到只有 perl 或 awk 其中一個能處理
我自已測是 Awk 比較快;不過,選擇喜歡的語法,順手好用的比較重要
以下測試,僅供參考
沒時間看的話,就是 Awk 比 Perl 和 Ruby 都快
平台:Debian Linux Jessie
GNU Awk 4.1.1
Perl 5.20.2
Ruby 2.1.5p273
文字檔案 gencode.v22.annotation.gtf 大小 1.2 GB
測試動作為,將第三個欄位的值做為 Hash key,動作結束後印出 Hash 的 key
用 diff 可知三個輸出結果相同
$ head -n1 gencode.v22.annotation.gtf
chr1 HAVANA gene 11869 14409 . + . gene_id
"ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene";
gene_status "KNOWN"; gene_name "DDX11L1"; level 2; havana_gene
"OTTHUMG00000000961.2";
$ time gawk '{ h[$3]++; } END { for (k in h) print k; }'
gencode.v22.annotation.gtf | sort > output_awk
real 0m2.256s
user 0m0.944s
sys 0m0.152s
$ time perl -a -ne '$h{$F[2]}++; END { for $k (keys %h) { print $k, "\n";} }'
gencode.v22.annotation.gtf | sort > output_perl
real 0m22.341s
user 0m22.176s
sys 0m0.152s
$ time ruby -a -ne 'BEGIN { h = Hash.new 0 }; h[$F[2]] += 1; END {h.keys.each
{|e| puts e}};' gencode.v22.annotation.gtf | sort > output_ruby
real 0m10.165s
user 0m10.024s
sys 0m0.128s

Links booklink

Contact Us: admin [ a t ] ucptt.com