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 :

lire dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Lille
    Inscrit en
    Février 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lille
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 154
    Par défaut lire dans un fichier
    Bonjour je veux créer un script .sh pour lire dans un fichier .txt et me retourner les valeurs j'ai fais ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cat < conf.txt | while true
    do
       read ligne
       if [ "$ligne" = "" ]; then break; fi
       set -- $ligne
       nom=$1
       adresse=$2
       volume=$3
       versio=$4
       systeme=$5
       echo nom=$1, adresse=$2, volume=$3, version=$4, system=$5
    done
    Cela me retourne mes valeurs mais je ne peux pas m'en resservir car j'utilise un do et je voudrai savoir comment faire svp?

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    explication sur l'UUoC


    ensuite pour ton code :
    c'est le fait que tu utilises un while true qui pose problème ducoup tu quittes jamais ta boucle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while read ligne
    do 
       nom=$1
       adresse=$2
       volume=$3
       version=$4 # en plus là tu oulies le "n"
       systeme=$5
       echo nom=$1, adresse=$2, volume=$3, version=$4, system=$5
    done < conf.txt
    ça devrait marcher.
    et surtout tu pourras cette fois ci te re servir de tes variables
    voir même re diriger tes résultats vers un fichier...si nécessaire

  3. #3
    Membre très actif
    Homme Profil pro
    Lille
    Inscrit en
    Février 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lille
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 154
    Par défaut
    Merci de ta réponse
    J'ai essayer ton programme mais il ne me renvois plus rien je m'explique

    dans mon conf.txt j'ai :

    ceci est un test e

    lorsque mon script lit je devrai avoir

    nom=ceci, adresse=est, volume=un, version=test, system=e

    hors j'ai

    nom=, adresse=, volume=, version=, system=

  4. #4
    Membre très actif
    Homme Profil pro
    Lille
    Inscrit en
    Février 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lille
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 154
    Par défaut
    Un exemple plus concret de ce que je veux
    J'ai mon fichier conf.txt

    Paros 192.168.20.10 C: 2c windows
    Aztse01 192.168.20.11 sdb1 2c windows

    a l'aide d'un script.sh
    je voudrai aller lire chaque mot et les associer à un argument pour pouvoir m'en servir dans une commande après.

    Voila en espérant m’être bien exprimé

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ok mai la methode n'est pas la même dans ce cas...

    tu dois pas lire ligne à ligne mais colonne à colonne

    inspires toi de ce test
    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
    19
    20
    21
     
    francois@trillian:~$ cd /tmp
    francois@trillian:/tmp$ mkdir test
    francois@trillian:/tmp$ cd test
    francois@trillian:/tmp/test$ cat > conf.txt
    Paros 192.168.20.10 C: 2c windows
    Aztse01 192.168.20.11 sdb1 2c windows
    francois@trillian:/tmp/test$ while read ligne ; do 
    > nom=$(echo $ligne | awk '{print $1}')
    > address=$(echo $ligne | awk '{print $2}')
    > disk=$(echo $ligne | awk '{print $3}')
    > os=$(echo $ligne | awk '{print $4}')
    > echo "  HOST:$nom ADRESSE:$adress DISK:$disk OS:$os " >> results.formated
    > done < conf.txt
    francois@trillian:/tmp/test$ cat results.formated 
      HOST:Paros ADRESSE: DISK:C: OS:2c 
      HOST:Aztse01 ADRESSE: DISK:sdb1 OS:2c 
    francois@trillian:/tmp/test$ cd ..
    francois@trillian:/tmp$ rm -rf ./test/
    francois@trillian:/tmp$ cd
    francois@trillian:~$
    bien sur c'est mal de faire un awk à chaque fois mais c'est juste pour te faire comprendre le principe de découpage...

    optimises après une fois que tu maitrise la solution

    PS: tu notera au passage la faute de frappe qui à interdit l'apparition de l'adresse IP mais ça c'était pour voir si tu suivais et j'ai compté que 4 variables au lieu de 5 colonnes ... mais c'est juste un exemple donc ..... à toi d'adapter maintenant...


    une dernière chose : pour faire propre quand tu utilises une pile de données comme ça .... une matrice de 5 champs sur N lignes
    ça vaut le coup d'utiliser une tableau de variable plustot qu'une variable pour chaque...
    l'avantage est de pouvoir valoriser le tableau dans la boucle et traiter les données après la boucle plustot que dedans...

  6. #6
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    aller pour le fun je le refais vite mais mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    francois@trillian:~/test$ while read ligne ; do  
    for i in {1..5} ; do table[$i]=$(echo $ligne | awk -v _i_=$i '{print $_i_'}) ; done
    echo >> resultat
    echo "   HOST=${table[1]} - ADRESSE=${table[2]} - PARTITION=${table[3]} - INFO=${table[4]} - OS=${table[5]} " >> resultat
    done < conf.txt
    francois@trillian:~/test$ cat resultat 
     
       HOST=Paros - ADRESSE=192.168.20.10 - PARTITION=C: - INFO=2c - OS=windows 
     
       HOST=Aztse01 - ADRESSE=192.168.20.11 - PARTITION=sdb1 - INFO=2c - OS=windows 
    francois@trillian:~/test$

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

Discussions similaires

  1. lire dans un fichier .ini
    Par porki dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 16/01/2006, 12h00
  2. lire dans un fichier .txt
    Par Baptiste Wicht dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 17/12/2005, 18h31
  3. Réponses: 4
    Dernier message: 01/12/2005, 01h01
  4. Ecrire et lire dans un fichier texte
    Par podz dans le forum C
    Réponses: 3
    Dernier message: 25/10/2005, 16h57
  5. Réponses: 18
    Dernier message: 09/08/2005, 12h57

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