On Fri, Mar 26, 2004 at 10:11:09AM +0100, Jacques L'helgoualc'h wrote: > UUOP = Useless Use Of *Perl* ;)
Voyons voir... > lhh $ time perl -ne 'print if!$l{$_}++' <tmp/bench &>/dev/null > > real 0m0.047s > user 0m0.040s > sys 0m0.010s > lhh $ time awk '!l[$0]++' <tmp/bench &>/dev/null > > real 0m0.027s > user 0m0.030s > sys 0m0.000s Comme dit J8, ton exemple est discutable. Je viens donc d'essayer plusieurs choses sur un gros fichier (toutes les sources d'un noyau linux concaténées dans un seul fichier, 6 millions de lignes pour 173M: [EMAIL PROTECTED]:yves$ wc linux ; ls -lh linux 6110997 22043218 181766643 linux -rw-r--r-- 1 yves yves 173M Mar 26 10:17 linux Où l'on s'apperçoit que les idées reçues ne sont pas particulièrement utiles: [EMAIL PROTECTED]:yves$ time perl -ne 'print if !$l{$_}++' < linux > /dev/null real 0m36.050s user 0m26.180s sys 0m5.610s [EMAIL PROTECTED]:yves$ time awk '!l[$0]++' < linux > /dev/null real 0m46.300s user 0m40.690s sys 0m3.680s Après démarrage, Perl est _nettement_ _plus_ rapide que awk. Maintenant, pour la vraie surprise (où il faut sans doute que je précise que j'ai testé sous bash): [EMAIL PROTECTED]:yves$ time cat linux | perl -ne 'print if !$l{$_}++' > /dev/null real 0m32.237s user 0m25.640s sys 0m5.260s [EMAIL PROTECTED]:yves$ time cat linux | awk '!l[$0]++' > /dev/null real 0m43.167s user 0m40.080s sys 0m2.670s Il semble donc maginalement _plus_efficace_ d'utiliser cat+pipe que d'utiliser la redirection de bash. Travaux pratiques pour le weekend: comment cat et bash lisent-ils les fichiers, et pourquoi "cat lit et bash pipe" est-il plus efficace que "bash lit et pipe"? Y.