IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

ma boucle cat ne lit pas la derniere ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut ma boucle cat ne lit pas la derniere ligne
    Bonjour,
    j'ai un fichier contenant plusieurs lignes que je veux traiter une à une
    j'utilise donc le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cat MonFichier | (while read LINE
    do
    	blablabla
    done
    et j'ai remarqué que lorsque la derniere ligne ne contenant pas de retour chariot elle n'était pas traitée...
    je ne comprend vraiment pas pourquoi
    et comment y remédier

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Tu as bien cerné le problème

    La solution est d'ajouter un NewLine après le dernier enregistrement.
    Ceci, uniquement s'il manque un NewLine, car dans le cas contraire, tu ajouterais un enregistrement vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [ $(tail -c1 MonFichier) != "" ] ; then
        echo "" >> MonFichier 
    fi

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    le truc c'est qu'il y a d'autres traitements après, et je préferai éviter de toucher au fichier, même si au pire je peux supprimer le retour chariot à la fin de mon traitement.

    merci

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Un fichier dont le dernier enregistrement ne contient pas de NewLine est un fichier incorrect.
    2 solutions :
    - soit la correction est faite en amont, corriger le programme qui crée le fichier.
    - soit la correction est faite en aval, ajouter un NewLine en fin de fichier.

    C'est toi qui voit

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (cat foo ; echo "") | sed '/^$/d'
    Mais ca efface les lignes vides intermediaires...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par dams78 Voir le message
    le truc c'est qu'il y a d'autres traitements après, et je préferai éviter de toucher au fichier, même si au pire je peux supprimer le retour chariot à la fin de mon traitement.
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "" > /tmp/eof
    cat fichier /tmp/eof | while read;do
        ...
    done

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    Citation Envoyé par ripat Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "" > /tmp/eof
    cat fichier /tmp/eof | while ...
    Pourquoi passer par un fichier intermédiaire ?
    On peut directement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (cat fichier ; echo "") | while ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2015, 17h49
  2. oucle qui ne lit pas la premiere ligne du fichier?
    Par areuh_fr dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2010, 09h22
  3. [MySQL] Boucle qui ne lit que la dernière ligne
    Par YaNnTeB dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 21/08/2009, 10h56
  4. fonction boucle des radio buttons qui ne reconnait pas le dernier radio
    Par mystro7200 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 15/09/2008, 14h06
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo