Lecture de fichier avec while do

Résolu
yoopi -  
 yoopi -
Bonjour,

voici mon problème :

mon texte cumul.txt contient 4 lignes

ex : 2536
8456
7594
6452

mais lorsque j'effectue ma boucle (pour lire toutes les lignes de mon fichier), il m'affiche seulement une fois ok alors qu'il devrait l'afficher 4 fois

ma boucle ne me permet donc pas de lire entièrement mon fichier.

qui pourrait m'aider ?

ma boucle :

cpt=0
{
while read line

do grep "$line" > /dev/null
if [ "$line" = 0 ]
then
echo ""$line""
cpt=`expr $cpt + 1`
else
echo "ok"
fi

done < cumul.txt
}

d'avance merci
Configuration: Linux
Firefox 3.0.5

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaie comme ça :
    cpt=0
    {
    while read line
    
    do grep "$line" > /dev/null
    if [ "$line" = 0 ]
    then
    echo ""$line""
    
    else
    echo "ok"
    fi
    
    cpt=`expr $cpt + 1`
    
    done < cumul.txt
    } 
    ;-))
    0
    1. yoopi
       
      slt,

      déplacer le compteur n'a rien changé,

      maintenant mon fichier fait 3 lignes (il change tout le temps) mais j'ai seulement un affichage qui se produit !

      voici le résultat lorsque j'exécute mon programme :

      ok
      THE FLUX IS OK

      alors que ce devrait être :

      ok
      ok
      ok
      THE FLUX IS OK
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > yoopi
         
        De toutes façons dans la situation actuelle, ton compteur il ne sert à rien ;-(

        Et puis aussi, tu veux faire quoi exactement avec cette boucle ???

        do grep "$line" > /dev/null
        if [ "$line" = 0 ]

        C'est sensé faire quoi ?

        0
      2. yoopi > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        re,

        en fait cette boucle fait partie d'un long programme et le compteur est utilisé plus tard et il est très important !

        ce que je veux faire c'est contrôler que les nombres sur chaque ligne de mon fichier soient différents de 0, si un nombre est égal à 0 alors il faut le signaler avec un echo qqch sinon ici je suis en mode test donc, je vérifie que ma boucle li bien toutes les lignes de mon fichier et pour ce faire je l'affiche avec un echo.

        donc :

        je crée une boucle pour lire un fichier,
        je li chaque ligne (ce sont des numeric) de mon fichier,
        si il y a un élément qui est = à 0,
        alors je le signale et j'incrémente un compteur,
        sinon j'affiche l'élément que je viens de lire (si il est différent de 0),

        j'aimerai donc avoir un résultat avec autant de ligne qu'il n'y a dans mon fichier.

        merci pour ta collaboration jipicy
        0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [tmpfs]$ cat fich
    2536
    8456
    7594
    8503
    6452
    2036
    
    [tmpfs]$ cat foo.sh
    #! /bin/sh
    
    #set -xv
    
    cpt=0
    
    while read line
    
    do grep "0" <<<"$line" > /dev/null
    if [ "$?" = 0 ]
    then
    echo ""$line""
    cpt=`expr $cpt + 1`
    else
    echo "ok"
    fi
    
    done < fich
    echo "compteur=$cpt"
    
    [tmpfs]$ ./foo.sh
    ok
    ok
    ok
    8503
    ok
    2036
    compteur=2
    
    [tmpfs]$  
    ;-))
    0
    1. yoopi
       
      merci beaucoup,

      je n'ai pas encore testé mais ça m'a l'air d'être tout à fais ce que je cherchais ;-)

      une fois encore, je te remercie pour tes précieux conseils
      0