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 :

gérer les lignes d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut gérer les lignes d'un fichier
    Salut à tous.
    Voici mon problème sur lequel j'ai passé déja un moment
    j'ai un fichier.txt dans lequel j'ai des éléments dont je ne connais pas le nombre.
    Soit elt1 elt2 elt3 et chaque élément est sur une ligne.
    Ce que je souhaite faire dans mon shell c'est récupérer chaque élément du ficher et le mettre dans une variable.
    Au sortir de la boucle je récupère une chaîne avec mes éléments séparés par des espaces.
    J'ai essayé çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    valeur="";
    for i in `cat $monfichier` ; do
            valeur=$valeur $i
    done
    echo $valeur
    et autres trucs car je suis un vrai novis ma cà marche pas .

    J'ai vraiment besoin d'un coup de pousse. Surtout quand je pense que bout de code dort quelque part et que mon petit doit me dit que çà ne devrait être rien du tout.
    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Soyons concret. Le fichier fichier.txt contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tata
    tete
    titi
    toto
    tutu
    tyty
    le retour à la ligne n'est qu'un caractère comme les autres, alors en le remplaçant par un espace, on obtient ce que tu veux, non? Cela donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ var=$(cat fichier.txt | tr '\n' ' ')
    $ echo $var
    tata tete titi toto tutu tyty
    $

  3. #3
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Une autre solution, un peu plus compliquée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(awk '{var = var $0 " "} END {print var}' fichier.txt)
    Le petit problème ici est que $var se termine par un espace.

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Encore une autre, où tu trouveras la correction de ton problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var=""
    while read line
    do
        var="$var $line"
    done < fichier.txt

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut ça swing !!!
    Je te remercie jmelyn
    ta dernière proposition avec awk est ce que je souhaite faire et me permet d'avancer dans ce que je fait.
    Alors merci encore.
    PS : Il va falloir que je fasse un peux plus du shell car je trouve très élégant...

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Le langage de script est tricky, c'est-à-dire qu'il ressemble au langage humain: on peut dire une chose de différentes façons; certaines sont claires, d'autres nettement moins.

    Pour les exemples que j'ai apportés, le premier est le plus concis et le plus clair. Le second demande un peu plus de connaissances. Quant au troisième il est plus lourd, plus verbeux (à écrire et donc à lire), plus lent à exécuter; mais il ressemble à la programmation classique. Par contre, je ne comprends pas pourquoi le premier caractère n'est pas un espace...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2010, 15h15
  2. Lire les lignes d'un fichier avec csh
    Par nicolas581 dans le forum Linux
    Réponses: 4
    Dernier message: 24/03/2010, 16h38
  3. Réponses: 14
    Dernier message: 19/11/2005, 18h56
  4. Afficher les lignes d'un fichier
    Par pepere73 dans le forum C++
    Réponses: 16
    Dernier message: 21/02/2005, 22h25
  5. Réponses: 3
    Dernier message: 26/04/2004, 12h51

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