• [^] # Re: Commençons par le début

    Posté par (Mastodon) . En réponse au message Un pipeline, deux pipelines, trois pipelines.... Évalué à 2.

    programme1 | traitement : ça affiche bien le résultat traité au fur et à mesure dans mon terminal.
    J'ai fais ce test là, c'est sûr traitement n'a pas besoin de l'intégralité des données pour les traiter.
    programme1 dure très longtemps (une heure environ), donc je suis vraiment sûr de moi, j'ai des affichages sortis par traitement immédiatement.


    Que mes données soient dans le cache...
    traitement devrait faire un flush à chaque ligne qu'il affiche ? Histoire d'être sûr qu'il ne cache pas bêtement son truc avant que ça passe dans le deuxième pipe ?
    Comment je fais ça en bash...

    Un exemple concret est le suivant :
    url=un fichier quelque part, plutôt gros pour bien voir la chose
    wget $url 2>&1 | awk '{for(i=1;i<=NF;i=i+1)if($i~/[[:digit:]]+%/){gsub("%","",$i);print $i};}' | Xdialog --gauge "$url" 0 0
    unset url
    On voit mieux avec Xdialog qu'avec dialog simplement, parce que ça se traine beaucoup plus, et je teste avec un fichier assez gros, il le télécharge en entier et après on voit la jauge avancer jusqu'à 100%, enfin avec dialog ça va trop vite on ne voit rien, mais avec Xdialog, la barre monte joliment de 0% à 100%. Le fichier faisant 27Mo, il y a nombre d'étapes.
    Et tu peux tester juste programme1 | traitement :
    wget $url 2>&1 | awk '{for(i=1;i<=NF;i=i+1)if($i~/[[:digit:]]+%/){gsub("%","",$i);print $i};}'
    Tu vois bien l'affichage se faire au fur et à mesure que le fichier se télécharge, les pourcents s'affichent bien.
    Puis faire un :
    for i in 10 20 30 40 50 60 70 80 90 100; do echo $i; sleep 1; done | Xdialog --gauge "$url" 0 0
    nous fait bien monter le pourcentage de la jauge de 10% toutes les secondes.

    Wala wala...

    Yth.