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

Linux Discussion :

comment concatener des lignes


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut comment concatener des lignes
    bonjour,
    Par while read, je lis les lignes d'un fichier
    si je trouve un "=", je lmets la ligne dans un autre fichier
    sinon je lis la ligne suivante jusqu'à trouver un "="

    Mais comment garder en mémoire la ligne que je viens de lire, et concaténer avec la ligne suivante jusqu'à trouver le caractère '='.

    merci de votre aide
    @+

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Je ne comprends pas ton commentaire sur la concaténation. Qu'est ce que tu as besoin de concaténer ? Pourquoi veux-tu garder une ligne en mémoire ?

    Ce que tu cherches à faire, c'est bien ça non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "=" fichiersource | head -n 1 > fichierdestination
    On peut faire moins bourrin en affinant, mais comme je ne suis pas sûr de ce que tu cherches exactement...

  3. #3
    Membre régulier Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 98
    Points
    98
    Par défaut
    je pense pas que tu aura besoin de garder la ligne en memoire, en cas de non existence de "=" tu touche pas au fichier

  4. #4
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Peux-tu nous poster un exemple de fichier en entrée et du résultat souhaité

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut re
    bonjour
    je m'explique
    voici un exemple de fichier sur plusieurs lignes

    200712RC 0823 A 2601T 230V300 8000N -W020///
    S5///
    B00/ /////U 096 992=
    20071208233 0823 015G27T 9DV N 106 97
    OV0/// 03 Q00=

    et je voudrais obtenir :

    200712RC 0823 A 2601T 230V300 8000N -W020/// S5/// B00/ /////U 096 992= 20071208233 0823 015G27T 9DV N 106 97 OV0/// 03 Q00=

    cad que quant je trouve une ligne qui finit par "=" ,je concatene avec celle(s) qui est avant. Tant que je ne trouve pas de "=" je lis la ligne suivante...
    merci

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Heu je dois avoir du mal, mais j'ai l'impression que là tu as concaténé toutes tes lignes sans te préoccuper du signe "=".

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut re
    bonjour autant pour moi ...à la ligne apres chaque "="
    je m'explique
    voici un exemple de fichier sur plusieurs lignes

    200712RC 0823 A 2601T 230V300 8000N -W020///
    S5///
    B00/ /////U 096 992=
    20071208233 0823 015G27T 9DV N 106 97
    OV0/// 03 Q00=

    et je voudrais obtenir :

    200712RC 0823 A 2601T 230V300 8000N -W020/// S5/// B00/ /////U 096 992=
    20071208233 0823 015G27T 9DV N 106 97 OV0/// 03 Q00=

    cad que quant je trouve une ligne qui finit par "=" ,je concatene avec celle(s) qui est avant. Tant que je ne trouve pas de "=" je lis la ligne suivante...
    merci

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    J'en suis à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {RS="";} {gsub(/[^=]\n/,""); print $0}'
    Mon problème, c'est que ça détruit le dernier caractère de chaque ligne ne finissant pas par '='. En effet, j'ai besoin de mettre [^=] dans le motif de gsub...

    Si quelque sait comment gérer les parenthèses capturantes avec gsub, ce serait parfait.

    un truc du genre

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Bon j'y suis, j'ai employé une autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    awk '
    BEGIN {ligne=""}
    {ligne=ligne $0}
    /\=$/  {print ligne;ligne=""}'
    à chaque passage, on concaténe la ligne lue à la variable "ligne" initialisée à rien.
    Si on rencontre un égal terminateur, on imprime et on vide la variable ligne.

    Attention : comme tu ne dis pas quoi faire si on ne trouve pas de égal (par exemple, la derniere ligne de ton fichier n'en contient pas), je ne sais pas comment agir.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut re
    Salute
    Si pas de "=", ..justement je dois les stocker en un seule ligne jusqu'a trouver la ligne avec "=" qui finalise ma ligne..

    en fait j'ai bidouillé un peu mon script shell de cette façon,
    ca marche mais si mes premières lignes ne contiennent pas de "="...
    elles disparaissent .....POURQUOI

    while read ligne
    do
    debut=""
    tempo=`echo $ligne | grep "="`

    if [ -n $tempo ]; then
    fin=`cut -d= -f1 $tempo`
    echo "${debut} ${fin}" >> recuptemp ## fichier avec lignes finies
    debut=""
    else
    debut="${debut} ${tempo}"

    fi
    done < recup ####fichier approvisionnement

  11. #11
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e :a -e '/=$/! N; s/\n/ /; ta' liste.txt
    Résultat (avec sed du GNU)
    http://sed.sourceforge.net/sed1line_fr.html


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    200712RC 0823 A 2601T 230V300 8000N -W020/// S5/// B00/ /////U 096 992=
    20071208233 0823 015G27T 9DV N 106 97 OV0/// 03 Q00=

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/08/2008, 15h25
  2. [Requete] Comment ignorer des lignes avec un LOAD DATA
    Par frangin2003 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2005, 12h14
  3. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40
  4. Réponses: 4
    Dernier message: 02/09/2004, 14h50

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