#!/usr/pkg/bin/perl # # compare speed of egrep and fgrep for many keywords. # # configuration params $egrep="/usr/bin/egrep"; #$egrep="/usr/local/gnu/bin/egrep"; $fgrep="/usr/bin/fgrep"; #$fgrep="/usr/local/gnu/bin/fgrep"; $words="/usr/share/dict/words"; $doc="/tmp/bigtext"; # don't touch following lines ($nwords)=split(' ', `wc -l $words`); $keywords_e_pref="/tmp/ke"; $keywords_f_pref="/tmp/kf"; $iteration=5; do efgrep(4); do efgrep(8); do efgrep(16); do efgrep(32); do efgrep(64); do efgrep(128); do efgrep(256); do efgrep(512); do efgrep(1024); do efgrep(2048); sub efgrep { local($nkeywords) = @_; local($keywords_e) = ("$keywords_e_pref$nkeywords"); local($keywords_f) = ("$keywords_f_pref$nkeywords"); open(WORDS, $words) || die "cannot open $word.\n"; open(KEYWORDSE, ">$keywords_e") || die "cannot open $keywords_e.\n"; open(KEYWORDSF, ">$keywords_f") || die "cannot open $keywords_f.\n"; printf KEYWORDSE "("; srand(time + $$); $k = 0; while () { if (rand($nwords - $. + 1) < ($nkeywords - $k)) { printf KEYWORDSF; chop; if (++$k == $nkeywords) { printf KEYWORDSE "$_)"; last; } else { printf KEYWORDSE "$_|"; } } } close(WORDS); close(KEYWORDSE); close(KEYWORDSF); printf STDERR "$nkeywords keywords:\n"; # -q option is not used intentionally. do time_command("$fgrep -f $keywords_f $doc > /dev/null"); do time_command("$egrep -f $keywords_e $doc > /dev/null"); printf STDERR "\n"; #unlink($keywords_f); #unlink($keywords_e); } sub time_command { local($command) = @_; printf STDERR "execute: $command\n"; for ($i = 0; $i < $iteration; $i++) { system("time $command"); } }