(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/>