(Courriels de diversion: <illicite@jalonneraient-mercuriales.com> <flippers@deroute-relayer.com> <degazant@repus-calibrent.com> <grossissent@irrite-urgences.com> <grâce@favoriserait-debarquerent.com> <colmatera@entr'aperceviez-encastrera.com> <libres@sillonnaient-cauteriseriez.com> <repererait@spoliateur-appele.com> <depaqueter@gendarme-assermenter.com> <sportivement@alcools-rebâtiras.com> )
Suite aux conseils de Vivien et Philippe, je me suis donc laisser tenter par le awk (que j'avais peu utilisé jusque là) et les perfs sont extraordinaires à coté de mon shell précédent: En parallèle mon collègue n'avait toujours pas fini d'écrire le prog C et quand je lui ai envoyé ma soluce 2, il était dégouté par la simplicité et la rapidité, la voici donc : ======================= FIC=test cat ${FIC} | awk ' BEGIN { lg = 250 } { l = length for(i=1 ; i <= l ; i+=lg) print substr($0, i, lg) ; } ' ======================= Merci a tous pour les conseils et fin du thread sur le sujet PS : Philippe, cette nouvelle version : - corrige le < en <= car dans le cas d'une ligne de 251 c, le 251nieme ne sortait pas - utilise la fonctionnalité $0 au lieu de $1 ---------------------------------------------------------------------- Jean-François THAMIE E-mail : jean-francois.thamie(at)cirso.fr CIRSO Toulouse Téléphone : 05-61-61-64-00, poste 385 ---------------------------------------------------------------------- |--------+----------------------------------> | | Midol-Monnet | | | <philippe.midol-monnet@I|| | DEALX.com> | | | | | | 28/03/2001 15:06 | | | | |--------+----------------------------------> >----------------------------------------------------------------------------| | | | Pour : Jean-François THAMIE/CER31/REC@CER31 | | cc : | | Objet : Re: [linux-31] Réf. : Re: [linux-31] La question shell| | de la semaine | >----------------------------------------------------------------------------| "Jean-François THAMIE" wrote: > > Ma soluce : > FIC=test > > cat ${FIC} | while read LIGNE > do > while [ ! "$LIGNE" = "" ] > do > echo $LIGNE | cut -c-250 > LIGNE=`echo $LIGNE | cut -c251-` > done > done > > Déjà, c'est lamentable en perf, alors en passant par awk !!! > J'ai vais surement faire un prog C > > Le prog C sera certainement le plus performant, mais je suis certain que awk sera plus efficace que le code ci-dessus. En effet cut est lancé 2 fois a chaque itération, ce qui veut dire création de 2 process etc.. c'est pas bon pour les perfs ;-). Avec awk un seul process et utilisation de fonctions built-in. Sed et Perl peuvent aussi résoudre le probleme. -- Philippe Midol-Monnet --------------------------------------------------------------------- Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>