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