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 :

Concaténation de chaines


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 27
    Points : 31
    Points
    31
    Par défaut Concaténation de chaines
    Hello tout le monde,

    je suis en train de créer un script qui me permettra (en tout cas, je l’espére) à terme d'envoyer un mail avec plusieurs information sur quelques serveurs ( Sous XenServer 7 pour être plus précis).

    Pour cela, je récupère dans un fichier le résultat d'une commande puis j'utilise "sed" afin d'enlever toutes les information inutiles.

    On va dire que le résultat obtenu est le suivant :
    chaine1
    chaine2
    chaine3
    chaine4
    chaine5
    chaine6
    J'aimerais recomposer les chaines afin d'avoir ce résultat :
    chaine1 chaine2
    chaine3 chaine4
    chaine5 chaine6
    Est ce que l'utilisation de "while read line" avec des commandes echos vous semble pertinente ?
    J'essaye sur cette piste mais pour l'instant je n'obtiens aucun résultat, j'aimerais donc savoir si c'est la bonne technique ou si je dois me diriger sur autre-chose.

    Merci d'avance !

    Cordialement,
    N.B

  2. #2
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Si la liste est placée dans "test.txt"
    on peut essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #variable du fichier
        fichier="test.txt"
     
     
        while IFS= read ligne; do
              read ligne1
            echo "$ligne $ligne1"
     
        done < "$fichier"
     
        exit 0

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Bonjour Michel,

    Merci pour l'aide, je vais essayer ça.
    Je partais sur l'utilisation de deux échos sans IFS :/

  4. #4
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Une peite modification : si on a un nombre impair de lignes , la dernière est unique mais ne sort pas
    Si on modifie légèrement, on a tout le monde
    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
     #variable du fichier
        fichier="test.txt"
     
        while IFS= read ligne; do
             ligne1=""
              read ligne1
     
            echo "$ligne $ligne1"
            ligne=""
        done < "$fichier"
        longueur=${#ligne}
        if [ "$longueur" -gt 0 ]
        then  echo $ligne
        fi
        exit 0

  5. #5
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut Une variante plus simple avec le fichier en parametre
    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
    22
    #!/bin/bash
    # lire2.sh
     
    # Usage: $1 <NOMFICHIER
    # lire2.sh test.txt
     
     
    while read ligne  # Pour toutes les lignes du fichier...
    do
      if read ligne1
      then
       ligne="$ligne $ligne1"
     fi   
      echo "$ligne"   # Afficher la ligne.
      ligne=""
    done<"$1"
    longueur=${#ligne}
        if [ "$longueur" -gt 0 ]
        then  echo $ligne
        fi
     
    exit 0

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    je te propose la commande paste relativement faite pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ for i in {1..6}; do echo chaine$i; done | paste - -
    chaine1 chaine2
    chaine3 chaine4
    chaine5 chaine6
    (ou si tu préfères paste - - < fichier)

  7. #7
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Génial BufferBob !
    Je viens de tester sur mon fichier test.txt qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chaine1
    chaine2
    chaine3
    chaine4
    chaine5
    chaine6
    test
    et donne effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chaine1    chaine2
    chaine3    chaine4
    chaine5    chaine6
    test
    Ce qui est correct
    Merci pour cette fonction dont je n'avais jamais entendu parlé !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Bonjour à vous deux,

    Merci beaucoup pour votre aide.
    je vais tester tout ça et pouvoir avancer.
    Effectivement, le paste a l'air très utile pour mon besoin !

    EDIT: Parfait, ça marche nickel ! Résolu ! A retenir la commande "paste" !
    N.B

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

Discussions similaires

  1. Concaténer une chaine et un nombre pour former un nom de variable ?
    Par debie1108 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/04/2007, 07h38
  2. Comment concaténer une chaine de caractères avec un espace ?
    Par blanchonvincent dans le forum MATLAB
    Réponses: 6
    Dernier message: 07/04/2007, 21h53
  3. Réponses: 2
    Dernier message: 02/04/2007, 11h07
  4. Réponses: 1
    Dernier message: 25/04/2006, 16h06
  5. Concaténéation de chaine dans un group by
    Par Delphi-ne dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/01/2006, 00h11

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