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 :

Probleme avec script - Concatenation et lecture de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 64
    Points
    64
    Par défaut Probleme avec script - Concatenation et lecture de fichier
    Bonjour à tous,

    J'ai une question sur un script que je fais pour changer l'output de plusieurs gros fichiers

    L'output est sensé ressembler à ça :
    >Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBWAAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG
    Mais apparait comme ça :
    >Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBW AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG
    J'ai écrit le script ci-dessous pour réparer le problème. Cependant la ligne 15 me retourne une chaine vide, or lorsque je fais l'echo dans le terminal, la phrase apparait bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/sh 
    FILENAME=$1
    OUTPUT=$2
    set LineToWrite=''
     
    while read LINE 
    do
    if  [ `echo "$LINE" | awk '{print substr($0,1,1)}'` == ">" ]
        then
            echo "$LineToWrite" >> $OUTPUT
            echo "$LINE" >> $OUTPUT
            set LineToWrite=''
        else
            set currLine=`echo "$LINE" | awk '{print substr($0,1,70)}'`
            set LineToWrite+=$currLine
    fi
    done <$FILENAME
    J'aimerais votre aide ....

    Merci d'avance!!

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 586
    Points : 19 469
    Points
    19 469
    Par défaut
    Bonjour,

    set ne fait certainement pas ce que tu crois.
    cette commande sert entre autre à positionner des options du shell, ou remplacer les paramètres positionnels; et non à définir des variables.

    awk est superflu.

    += n'existe pas en sh.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/bin/sh 
     
    FILENAME="$1"
    OUTPUT="$2"
    LineToWrite=""
     
    while read LINE 
    do
       if [ "$(echo "$LINE" | cut -c 1)" = ">" ]
       then
          echo "$LineToWrite" >> "$OUTPUT"
          LineToWrite=""
          echo "$LINE" >> "$OUTPUT"
       else
          currLine=$(echo "$LINE" | cut -c 1-70)
          LineToWrite="${LineToWrite}$currLine"
       fi      
    done <"$FILENAME"
    sans exemples du fichier à traiter...

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,


    if [ "$(echo "$LINE" | cut -c 1)" = ">" ]
    Je dirai même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "${LINE::1}" = ">" ]

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 64
    Points
    64
    Par défaut
    Merci N_Bah..

    Ça a en fait réglé le souci, il n'y a que les dernières lignes maintenant qui se trouvent ignorées, mais c'est peut-être du au fichier test que j'ai utilisé. Je vais tester sur le fichier final Merci!!!

    Je pense aussi que j'ai du avoir une notion erronée du "set"

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 586
    Points : 19 469
    Points
    19 469
    Par défaut
    Citation Envoyé par zipe31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "${LINE::1}" = ">" ]
    ce n'est pas une substitution POSIX, et vu que Kassar écris pour sh...

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant en propriété intellectuelle
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en propriété intellectuelle
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 64
    Points
    64
    Par défaut
    Petite rectification sur ma derniere intervention.

    L'output est parfaite maintenant.

    Juste l'ajout dans le cas ou se sont les derniere lignes de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$LineToWrite" >> "$OUTPUT"
    apres le Done

    Merci!

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ce n'est pas une substitution POSIX, et vu que Kassar écris pour sh...
    Ben tout dépend aussi du système (ou de la distrib) et vers où pointe le lien symbolique le cas échéant...

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 586
    Points : 19 469
    Points
    19 469
    Par défaut
    justement, quand on écrit pour sh, on ne sait pas ce qu'est sh.
    Il est plus sûr de ne présumer de rien, et de faire du 100% portable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/08/2006, 10h55
  2. probleme avec script
    Par tostos94 dans le forum Windows
    Réponses: 1
    Dernier message: 24/06/2006, 14h09
  3. Probleme avec <script src=
    Par MicroPuce dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/05/2006, 15h12
  4. probleme avec script perl grab_tv_fr.pl
    Par ZiMo dans le forum Langage
    Réponses: 6
    Dernier message: 30/11/2005, 17h12
  5. Réponses: 11
    Dernier message: 17/11/2005, 17h13

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