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éner plusieurs lignes selon une condition


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
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut Concaténer plusieurs lignes selon une condition
    Bonjour,

    je veux concaténer des lignes d'un fichier texte, j'ai un fichier sous ce format :
    numero:1 aa: xxx bbb:yyy taille: 8.0 texte: Derrière elle marchait une longue file de Maures,
    numero:2 aa: xxx bbb:yyy taille:12.0 texte:combat même, il avait cru souvent entendre sa
    numero:3 aa: xxx bbb:yyy taille:8.0 texte:retentirent dans tout le camp et tirèrent les soldats
    numero:4 aa: xxx bbb:yyy taille:8.0 texte:Emmanuela, l'arrêtant par le bras, lui dit d'un ton
    je veux récupérer ce qui est écrit à partir "texte:" pour chaque taille à part, par exemple : taille 12 , j'aurais qu'une seule ligne de texte

    Merci d'avance pour toute idée

  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
    ici ton fichier s'appelle t

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep ":12.0" t | sed "s/.*tail/tail/"
    ou en une seule passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/:12.0/ !d ; s/.*tail/tail/' t
    c'est juste du découpage :
    selectionner les lignes contenant ":12.0"
    ne pas l'effacer (donc tout le reste est effacé)
    substituer tout jusqu'à "tail" par "tail"

    ici ça modifie pas le fichier source

    tu peux obtenir un fichier de resultat comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/:12.0/ !d ; s/.*tail/tail/' t > z
    z sera le resultat et t reste inchangé.

    ou tu peux effacer apres les lignes non intéressantes bien sur ça change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fpssl@fr:$ sed '/:12.0/ s/.*tail/tail/; /^taille/ !d' t
    taille:12.0 texte:combat même, il avait cru souvent entendre sa
    fpssl@fr:$ rm t
    fpssl@fr:$

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Afin que nous puissions bien comprendre ce que tu veux, pourrais-tu, pour le fichier que tu nous as donné et que j'imagine être un exemple, nous donner précisément la sortie que tu attends? (j'ai bien dit "donner" et non "décrire")

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    merci pour la rapidité ,
    oui je veux avoir un fichier texte taille_12 contenant :

    combat même, il avait cru souvent entendre sa
    Un autre taille_8 contenant :

    Derrière elle marchait une longue file de Maures,
    retentirent dans tout le camp et tirèrent les soldats
    l'arrêtant par le bras, lui dit d'un ton
    etc selon ma liste de choix, donc je veux juste récupérer le texte écrit après le mots "texte:" et non pas toute la ligne

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in 12 8 ; do sed '/'${i}'/ !d ;  s/.*texte://' fichieroriginal > taille_${i} ; done
    pour automatiser les deux extractions si tu en avais d'autres à faire
    suffira de les ajouter au niveau de la boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in 6 8 10 12 14 ; do ............


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cat > t
    numero:1 aa: xxx bbb:yyy taille: 8.0 texte: Derrière elle marchait une longue file de Maures,
    numero:2 aa: xxx bbb:yyy taille:12.0 texte:combat même, il avait cru souvent entendre sa
    numero:3 aa: xxx bbb:yyy taille:8.0 texte:retentirent dans tout le camp et tirèrent les soldats
    numero:4 aa: xxx bbb:yyy taille:8.0 texte:Emmanuela, l'arrêtant par le bras, lui dit d'un ton 
    $ for i in 12 8 ; do sed '/'${i}'/ !d ;  s/.*texte://' t > taille_${i} ; done
    $ cat taille_8
     Derrière elle marchait une longue file de Maures,
    retentirent dans tout le camp et tirèrent les soldats
    Emmanuela, l'arrêtant par le bras, lui dit d'un ton 
    $ cat taille_12
    combat même, il avait cru souvent entendre sa
    $ rm taille_* t                                         
    $

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par frp31 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in 12 8 ; do sed '/'${i}'/ !d ;  s/.*texte://' fichieroriginal > taille_${i} ; done
    [Chipotage]Si le texte lui-même contient des nombres (genre 8 ou 12), tu vas sortir des lignes en trop.
    Si les tailles vont de 6 à 16 par exemple, même problème...
    [/Chipotage]

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,
    Citation Envoyé par jack-ft Voir le message
    [Chipotage]Si le texte lui-même contient des nombres (genre 8 ou 12), tu vas sortir des lignes en trop.
    Si les tailles vont de 6 à 16 par exemple, même problème...
    [/Chipotage]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in 12 8 ; do sed -n '/taille: *'"${i}"'.0/{ s/.*texte: *//p}' fichieroriginal > taille_${i} ; done

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/02/2015, 04h25
  2. Supprimer des lignes selon une condition
    Par j0joo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/03/2014, 14h40
  3. Concatener plusieurs lignes en une selon condition
    Par budfox777 dans le forum Excel
    Réponses: 3
    Dernier message: 27/03/2012, 18h40
  4. [XL-2003] Insérer une ligne selon une condition
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/07/2009, 17h20
  5. Concaténer plusieurs ligne d'une m^me table
    Par bobosh dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/08/2008, 16h13

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