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 :

fichier txt et variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut fichier txt et variable
    Bonjour,

    J'ai un fichier txt de cette forme ci :

    /home/toto 500
    /home/titi 1000
    .....

    Ce que j'aimerais faire c'est récupérer les différentes colonne "/home/toto" et "500", et les affecter à une variable de mon script !
    Est ce que quelqu'un aurait une piste a me donner ? j'ai essayer avec cut mais ça n'a pas l'air de bien marcher!

    merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Par défaut
    essaye ça (je te donne 99% du truc après à toi de faire une petite recherche pour que tout fonctionne ^^). Je pense qu'une rapide recherche sur google aurai pu t'aider ^^. Sinon je te donne une autre piste : la fonction awk ,fonction très puissante pour manipuler des fichiers mais plus complexe aussi.
    Voilà tu as toutes les cartes en main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while ligne 
    do 
    variable1=`echo $ligne| cut -d ' ' -f1`
    variable2=`echo $ligne| cut -d ' ' -f2`
    done <ton_fichier
    Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    merci ça marche !
    J'ai un autre problème mais la j'ai pas trouvé sur google.
    En fait je voudrai rajouter une valeur a la fin de chaque ligne, c'est de la concaténation mais avec le echo >> nom du fic
    Par exemple :
    /home/toto 500 5%

    en sachant que le 5% est une valeur calculé dans mon script

    merci d'avance

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Par défaut
    Faut vraiment que tu te creuses un peu les méninges ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while ligne 
    do 
    variable1=`echo $ligne| cut -d ' ' -f1`
    variable2=`echo $ligne| cut -d ' ' -f2`
     
    variable%=le traitement à faire sur ces variables pour trouver le %
     
    echo "$ligne $variable% %">>fichier_tmp
     
    done <ton_fichier
     
    cp fichier_tmp ton_fichier //pour copier ton fichier tmp sur ton fichier d'origine
    rm -f fichier_tmp // efface ton fichier tmp
    C'est moche avec un fichier temporaire mais tu peux tester ça marche. Je te laisse chercher une solution plus sympa

    Bon courage.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Pour éviter l'emploi d'un fichier temporaire, sed est utile :
    Code bash : 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
    19
    20
    file="kakashi08-20090715.dat"
    svgrd="${file}.bak"
    
    [ ! -f $svgrd ] && cp $file $svgrd
    
    echo "affichage de la sauvegarde du fichier :"
    cat $svgrd
    
    while read line; do
       set $line
       nbLine=$((++nbLine))
       p100="10%"
       sed -i "${nbLine}s@${1} ${2}@& ${p100}@" $file
    # ça c'est juste pour montrer comment utiliser les paramètres récupérés de la ligne lue par la commande set
    # autrement sed -i "${nbLine}s@$@${p100}@" $file fonctionne aussi bien.
    done < $file
    
    echo "affichage du fichier modifié :"
    cat $file
    exit 0
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ chmod +x kakashi08-20090715.sh
    $ ./kakashi08-20090715.sh
    affichage de la sauvegarde du fichier original :
    /home/toto 500
    /home/titi 1000
    affichage du fichier modifié :
    /home/toto 500 10%
    /home/titi 1000 10%
    $
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Import ACCESS de fichiers TXT à structure variable
    Par procyom dans le forum Autres outils décisionnels
    Réponses: 4
    Dernier message: 24/04/2008, 22h55
  2. Réponses: 4
    Dernier message: 26/06/2006, 11h41
  3. [FLASH MX] Variables depuis un fichier txt
    Par mascagne dans le forum Flash
    Réponses: 4
    Dernier message: 01/03/2006, 17h57
  4. Réponses: 5
    Dernier message: 21/10/2005, 11h48

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