<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Désolé si je passe pour un Philistin, mais pourquoi ne pas faire ça en séquentiel et en Python? <div class=""><br class=""></div><div class="">Pour être constructif, j’ai fait le test (c’est un peu plus verbeux, mais c’est assez clair)</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier New" class="">#!/usr/bin/env python3</font></div><div class=""><font face="Courier New" class=""># -*- coding: utf-8 -*</font></div><div class=""><font face="Courier New" class="">"""</font></div><div class=""><font face="Courier New" class="">Read file from stdin, fix dates and give totals</font></div><div class=""><font face="Courier New" class="">"""</font></div><div class=""><font face="Courier New" class="">import sys</font></div><div class=""><font face="Courier New" class="">import time</font></div><div class=""><font face="Courier New" class="">from dateutil.parser import parse as date_parse</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">start_time = time.time()</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># extract the values</font></div><div class=""><font face="Courier New" class="">lines = [l.strip().split(" ", 1) for l in sys.stdin.readlines() if l.strip()]</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># split</font></div><div class=""><font face="Courier New" class="">lines = [(float(a), date_parse(d)) for a, d in lines]</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># output</font></div><div class=""><font face="Courier New" class="">print('\n'.join(["%11.2f %s" % (a, d) for a, d in lines]))</font></div><div class=""><font face="Courier New" class="">print("%11.2f" % sum([a for a, d in lines]))</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">print("--- %s seconds ---" % (time.time() - start_time), file=sys.stderr)</font></div><div class=""><br class=""></div><div class="">En exécutant sur mon Raspberry Pi j’obtiens:</div><div class=""><div class=""><font face="Courier New" class="">    3569.00 2011-12-29 17:07:20</font></div><div class=""><font face="Courier New" class="">     594.40 2015-03-05 05:44:40</font></div><div class=""><font face="Courier New" class="">    9546.85 2015-12-31 06:56:45</font></div><div class=""><font face="Courier New" class="">    3445.75 2016-07-14 18:43:15</font></div><div class=""><font face="Courier New" class=""> 4674781.85</font></div><div class=""><font face="Courier New" class="">--- 6.447550058364868 seconds ---</font></div></div><div class=""><div class=""><br class="webkit-block-placeholder"></div><div class="">Ce qui n’est pas mal…</div><div class=""><br class=""></div><div class="">Et voici ma config (Raspberry 1B, je crois):</div><div class=""><div class=""><font face="Courier New" class="">cat /proc/cpuinfo</font></div><div class=""><font face="Courier New" class="">processor<span class="Apple-tab-span" style="white-space:pre">   </span>: 0</font></div><div class=""><font face="Courier New" class="">model name<span class="Apple-tab-span" style="white-space:pre">    </span>: ARMv6-compatible processor rev 7 (v6l)</font></div><div class=""><font face="Courier New" class="">BogoMIPS<span class="Apple-tab-span" style="white-space:pre"> </span>: 697.95</font></div><div class=""><font face="Courier New" class="">Features<span class="Apple-tab-span" style="white-space:pre"> </span>: half thumb fastmult vfp edsp java tls</font></div><div class=""><font face="Courier New" class="">CPU implementer<span class="Apple-tab-span" style="white-space:pre">   </span>: 0x41</font></div><div class=""><font face="Courier New" class="">CPU architecture: 7</font></div><div class=""><font face="Courier New" class="">CPU variant<span class="Apple-tab-span" style="white-space:pre">  </span>: 0x0</font></div><div class=""><font face="Courier New" class="">CPU part<span class="Apple-tab-span" style="white-space:pre">    </span>: 0xb76</font></div><div class=""><font face="Courier New" class="">CPU revision<span class="Apple-tab-span" style="white-space:pre">      </span>: 7</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">Hardware<span class="Apple-tab-span" style="white-space:pre">      </span>: BCM2708</font></div><div class=""><font face="Courier New" class="">Revision<span class="Apple-tab-span" style="white-space:pre">        </span>: 0010</font></div><div class=""><font face="Courier New" class="">Serial<span class="Apple-tab-span" style="white-space:pre">             </span>: 00000000e6fb0385</font></div></div>
<div class=""><br class=""></div><div class="">Comme quoi Python est un bon camion pour les tâches système.</div><div class=""><br class=""></div><div class="">Par contre je suis conscient qu’on ne fait pas toujours les choses d’une certaine façon parce que c’est facile, mais parce qu’il y a quelque chose à apprendre et par esprit d'aventure. Autrement il n’y aurait pas de motards, et tout le monde choisirait le confort prosaïque de la bagnole...</div><div class=""><br class=""></div><div class="">Bonne soirée,</div><div class="">Laurent</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">Le 15 févr. 2018 à 21:01, felix <<a href="mailto:felix@f-hauri.ch" class="">felix@f-hauri.ch</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><div class="">On Thu, Feb 15, 2018 at 07:56:21AM +0100, Laurent Franceschetti wrote:<br class=""><blockquote type="cite" class=""><br class="">Surtout quel est le problème que cette méthode résoud, et quelle est l’idée <br class="">centrale de la méthode?<br class=""></blockquote><br class="">Eliminer les ``forks'' répétitifs qui peuvent être évités.<br class=""><br class="">Petit exemple: Voici un fichier:<br class=""><br class="">  $ wget <a href="http://f-hauri.ch/vrac/scTestFile.raw.gz" class="">http://f-hauri.ch/vrac/scTestFile.raw.gz</a><br class="">  scTestFile.raw.gz   100%[===================>]  12.14K  --.-KB/s  in 0.004s<br class=""><br class="">Qui contient des lignes (1000) de montants suivits de dates:<br class=""><br class="">  $ zcat scTestFile.raw.gz | (head -n3;tail -n7)<br class="">       2032.55  Jul 22 00:12:45 2007<br class="">       6229.85  Apr 19 20:31:15 2010<br class="">       3089.75  Sun Nov  2 08:48:10 2014<br class="">       3816.30  Sat Nov 19 21:12:50 2016<br class="">       7934.70  May 23 16:47:40 2008<br class="">       2969.45  Aug 30 2017 01:43:45<br class="">       3569.00  2011-12-29 17:07:20<br class="">        594.40  Thu Mar  5 05:44:40 2015<br class="">       9546.85  Dec 31 2015 06:56:45<br class="">       3445.75  2016-07-14 18:43:15<br class=""><br class="">Pour<br class="">  - unifier la présentation des dates et<br class="">  - calculer le total des montants,<br class="">je peux:<br class=""><br class="">  $ tot=0.0<br class="">  $ time while read val date;do<br class="">        tot=$(bc -l <<<"$tot+$val")<br class="">        printf "%11.2f %(%a %d %b %Y %T)T\n" $val $(<br class="">            date -d "$date" +%s<br class="">        )<br class="">    done < <(zcat scTestFile.raw.gz) > >(head -n3;tail -n7)<br class="">      2032.55 dim 22 jui 2007 00:12:45<br class="">      6229.85 lun 19 avr 2010 20:31:15<br class="">      3089.75 dim 02 nov 2014 08:48:10<br class="">      3816.30 sam 19 nov 2016 21:12:50<br class="">      7934.70 ven 23 mai 2008 16:47:40<br class="">      2969.45 mer 30 aoû 2017 01:43:45<br class="">      3569.00 jeu 29 déc 2011 17:07:20<br class="">       594.40 jeu 05 mar 2015 05:44:40<br class="">      9546.85 jeu 31 déc 2015 06:56:45<br class="">      3445.75 jeu 14 jui 2016 18:43:15<br class="">  real    2m0.433s<br class="">  user    0m20.960s<br class="">  sys     0m24.550s<br class=""><br class="">Euh oui, je l'ai fait sur un raspberry-pi... 2 minutes!<br class=""><br class="">  $ echo $tot<br class="">  4674781.85<br class=""><br class="">Bon, à présent voyons:<br class=""><br class="">  $ wget <a href="https://f-hauri.ch/vrac/shell_connector.sh" class="">https://f-hauri.ch/vrac/shell_connector.sh</a><br class="">  shell_connector.sh  100%[===================>]   7.93K  --.-KB/s    in 0.005s  <br class=""><br class="">  $ . shell_connector.sh <br class="">  $ newConnector /usr/bin/bc -l 0 0 <br class="">  $ newConnector /bin/date '-f - +%s' @0 0<br class="">  $ echo >&$BCIN tot=0<br class=""><br class="">Oui, je stoque la variable tot dans `bc`...<br class=""><br class="">  $ time while read val date ;do<br class="">      echo >&$BCIN tot=tot+$val<br class="">      myDate "$date" mDate<br class="">      printf "%11.2f %(%a %d %b %Y %T)T\n" $val $mDate<br class="">    done < <(zcat scTestFile.raw.gz) > >(head -n3;tail -n7)<br class="">      2032.55 dim 22 jui 2007 00:12:45<br class="">      6229.85 lun 19 avr 2010 20:31:15<br class="">      3089.75 dim 02 nov 2014 08:48:10<br class="">      3816.30 sam 19 nov 2016 21:12:50<br class="">      7934.70 ven 23 mai 2008 16:47:40<br class="">      2969.45 mer 30 aoû 2017 01:43:45<br class="">      3569.00 jeu 29 déc 2011 17:07:20<br class="">       594.40 jeu 05 mar 2015 05:44:40<br class="">      9546.85 jeu 31 déc 2015 06:56:45<br class="">      3445.75 jeu 14 jui 2016 18:43:15<br class="">  real    0m8.043s<br class="">  user    0m2.370s<br class="">  sys     0m0.800s<br class=""><br class="">Voilà, en évitant ~2000 forks, je le fais en 8" au lieu de 120"!<br class=""><br class="">  $ myBc tot montotal<br class="">  $ echo $montotal <br class="">  4674781.85<br class=""><br class="">Tant que mon shell courant existe et que je ne ferme pas les<br class="">descripteurs, je peux continuer à les utiliser...<br class=""><br class="">  $ ps --sid $(ps ho sid $$) fw<br class="">    PID TTY      STAT   TIME COMMAND<br class="">   4625 pts/2    Ss     0:00 -bash<br class="">   9146 pts/2    S      0:00  \_ /usr/bin/bc -l<br class="">   9150 pts/2    S      0:00  \_ /bin/date -f - +%s<br class="">   9188 pts/2    R+     0:00  \_ ps --sid 4625 fw<br class=""><br class="">Voilà, j'espère avoir montré l'intérêt de la méthode.<br class="">Bonne soirée!<br class=""><br class="">-- <br class=""> Félix Hauri  -  <<a href="mailto:felix@f-hauri.ch" class="">felix@f-hauri.ch</a>>  -  <a href="http://www.f-hauri.ch" class="">http://www.f-hauri.ch</a><br class="">_______________________________________________<br class="">gull mailing list<br class=""><a href="mailto:gull@forum.linux-gull.ch" class="">gull@forum.linux-gull.ch</a><br class="">http://forum.linux-gull.ch/mailman/listinfo/gull<br class=""><br class=""></div></div></blockquote></div><br class=""></div></div></body></html>