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 :

recopie de ligne à x endroits dans le fichier


Sujet :

Shell et commandes GNU

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut recopie de ligne à x endroits dans le fichier
    Bonjour
    j'ai un fichier
    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
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3
    et je voudrais en sortie avoir
    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
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3XXX
    CODE3
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3
    OU MA_LIGNE_ENTETE est dupliquée avant CHAQUE ligne CODE1

    je pense qu'il faut utiliser sed 1 h ENTREE.TXT > SORTIE.TXT
    Mais je n'arrive pas à trouver la partie recopie avant CODE1

    Merci

  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 : 49
    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
    tu peux utiliser sed avec insert puisque ton marqueur d'emplacement est toujours le même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed '/CODE1.*/i\
    MA_LIGNE_ENTETE
    1d' t
    puis de supprimer le doublon généré à la ligne 1 puisque la ligne 2 est code1....
    en clair ça cherche CODE1 suivi de n'importe quoi et insère avant ta ligne d'entête.


    exemple :

    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
    [fpu@lne ~/tmp] sed '/CODE1.*/i\
    MA_LIGNE_ENTETE
    1d' t
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3XXX
    CODE3
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3
    [fpu@lne ~/tmp]

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    Merci de ta réponse rapide par contre au niveau MA_LIGNE_ENTETE
    est suivi de données variable. la ligne n'est pas une constante.
    Elle commence par la constante suivi d'une zone variable

    comment procédé ainsi

    merci

  4. #4
    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 : 49
    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
    si dans MA_LIGNE_ENTETE tu as juste LIGNE comme constante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed '/.*LIGNE.*/h ; /CODE1.*/G'
    place ta ligne contenant LIGNE apres chaque occurrence CODE1 .*
    je te laisse chercher pour la mise en plage inverse avec la ligne avant

    attention entre 'G' et 'g'

    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
    [fpu@lne /tmp] sed '/.*LIGNE.*/h ; /CODE1.*/G' t
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    MA_LIGNE_ENTETE
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    CODE1XXXXdfgfg
    MA_LIGNE_ENTETE
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE1XXXXdfgfg
    MA_LIGNE_ENTETE
    CODE2XXXX
    CODE3
    [fpu@lne /tmp]
    conclusion pour éliminer le décalage tu crées une ligne vide au dessus des CODE1.* et tu paste :

    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
    [fpu@lne /tmp] sed '/.*LIGNE.*/h ; /CODE1.*/{x;p;x;};1d' t
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3XXX
    CODE3
    MA_LIGNE_ENTETE
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3
    [fpu@lne /tmp]
    bien sur ce faisant si on change la ligne de référence ça marche tjrs :
    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
    [fpu@lne /tmp] sed '/.*LIGNE.*/h ; /CODE1.*/{x;p;x;};1d' t
    MA_LIGNE_ENTETEdfgdshfgsdhf
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE2XXXX
    CODE2XXXX
    CODE3XXX
    CODE3
    CODE4
    MA_LIGNE_ENTETEdfgdshfgsdhf
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3XXX
    CODE3
    MA_LIGNE_ENTETEdfgdshfgsdhf
    CODE1XXXXdfgfg
    CODE2XXXX
    CODE3
    [fpu@lne /tmp]

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    Merci c'est nickel,

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2008, 13h58
  2. placer des balise xml au bon endroit dans le fichier existant.
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/01/2008, 10h43
  3. Choisir la ligne a lire dans un fichier texte
    Par Lucas42 dans le forum C
    Réponses: 2
    Dernier message: 06/11/2007, 02h50
  4. Comment prendre la ligne d'apres dans un fichier..
    Par Pauli dans le forum Langage
    Réponses: 7
    Dernier message: 01/02/2007, 20h12
  5. [langage] Sauter une ligne en ecrivant dans un fichier
    Par mickey02 dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2005, 19h02

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