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 :

ajouter un caractère dans un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut ajouter un caractère dans un fichier
    Bonjour a tous

    dans un fichier avec des enregistrements comme celui ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    000000001 24500 L $$atitre1 $$b sous titre1 $$cFLAMANT
    000000002 24500 L $$atitre2 $$cFLAMANT
    000000003 24500 L $$atitre3 $$b sous titre3 $$cFLAMANT
    000000004 24500 L $$atitre4 $$cFLAMANT
    Je voudrais ajouter le caracter ":" au debut de $$b seulement pour les enregistrements qui possedent un cham $$b, pas les autres...Au final le fichier aura cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    000000001 24500 L $$atitre1 : $$b sous titre1 $$cFLAMANT
    000000002 24500 L $$atitre2 $$cFLAMANT
    000000003 24500 L $$atitre3 : $$b sous titre3 $$cFLAMANT
    000000004 24500 L $$atitre4 $$cFLAMANT
    Quelqu'un connait le sed qui fait ça?

    J'ai le debut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/[0-9]\{9\} 24500 L \
    mais je sais pas le faire jusqu'au bout.
    D'avance merci

  2. #2
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Salut,

    tu n'as pas du tout besoin de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/[0-9]\{9\} 24500 L \
    Si tu es sûr que $$b ne peut pas être à d'autres endroits, la ligne suivante suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\$\$b/: \$\$b/g' <fichier>
    ça remplace toutes les occurrences de $$b par : $$b dans le fichier

    Par contre, si tu veux être sûr que le $$b est bien en 5ème position, tu peux utiliser awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F' ' '$5 ~ /\$\$b/ {$5 = ": "$5} {print}' <fichier>
    -F' ' définit l'espace comme séparateur de champs
    $5 ~ /\$\$b/ {$5 = ": "$5} ajoute : devant les $$b qui se trouvent en 5ème position
    {print} affiche la ligne lue (avec le 5ème champ modifié si besoin)

    Y'a certainement plus rapide si des pros passent dans le coin

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Hay pardon, j'ai oublié un detail, c'est que le fchier comporte d'autres champs et certains sont aussi des $$b, mais ne cesessitent pas les :

    Ça concerne juste ceux qui commencent par ce paterne, d'ou l'utilisation du bout de code que j'avais passé au debut.

    Ici un exemple complet du registre numero 0000001

    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
    23
    24
    25
    000000001 LDR   L -----nam--2200313Iia-45e0
    000000001 020   L $$a2910239004
    000000001 0411  L $$aINGLES
    000000001 090   L $$aBIBLIOTECA DE COMBUSTIBLES FOSILES, LOURDES ARMESTO
    000000001 1001  L $$aFLAMANT, G. (ED.)
    000000001 24500 L $$aFLUIDISATION $$b PROCEEDINGS OF THE 3RD EUROPEAN CONFERENCE ON FLUIDIZATION, TOULOUSE, 28-31 MAI 2000:/$$cFLAMANT, G. (ED.);GAUTHIER, D. (ED.);HEMATI, M. (ED.);STEINMETZ, D. (ED.)
    000000001 250   L $$a1 ED
    000000001 260   L $$aNANCY : $$b SOCIETE FRANçAISE DE GENIE DES PROCEDES,$$c2000
    000000001 300   L $$a2 V.
    000000001 340   L $$aPAPEL
    000000001 490   L $$aRECENTS PROGRES EN GENIE PROCEDES ; V. 1475-76
    000000001 520   L $$aEN ESTA OBRA SE PUBLICAN LOS TRABAJOS PRESENTADOS EN LA CONFERENCIA QUE SE CITA.
    000000001 590   L $$aLIBRO
    000000001 6500  L $$a14000$$b53000
    000000001 653 0 L $$aFLUIDIZACION
    000000001 653 0 L $$aGASIFICATION
    000000001 7001  L $$aGAUTHIER, D. (ED.)
    000000001 7001  L $$aHEMATI, M. (ED.)
    000000001 7001  L $$aSTEINMETZ, D. (ED.)
    000000001 710 2 L $$aSOCIETE FRANçAISE DE GENIE DES PROCEDES
    000000001 852   L $$a20AP1026
    000000001 008   L 100811s2000^^^^xx^^^^^^^#^^^^000^0^eng^d
    000000001 901   L $$aGREVILLOT, G.;STORCK, A.
    000000001 902   L $$a02/06/00
    000000001 FMT   L BK

  4. #4
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Ahh, ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F' ' --re-interval '(/^[0-9]{9} 24500 L/ && $5 ~ /\$\$b/) {$5 = ": "$5} {print}' <fichier>
    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
    $ cat fichier.txt
    000000001 24500 L $$atitre1 $$b sous titre1 $$cFLAMANT
    000000002 24500 L $$atitre2 $$cFLAMANT
    000000003 24500 L $$atitre3 $$b sous titre3 $$cFLAMANT
    000000004 24500 L $$atitre4 $$cFLAMANT
    000000005 24600 L $$atitre1 $$b sous titre1 $$cFLAMANT
    000000006 24500 L $$atitre2 $$cFLAMANT
    000000007 24700 L $$atitre3 $$b sous titre3 $$cFLAMANT
    000000008 24500 L $$atitre4 $$cFLAMANT
    $ awk -F' ' --re-interval '(/^[0-9]{9} 24500 L/ && $5 ~ /\$\$b/) {$5 = ": "$5} {print}' fichier.txt
    000000001 24500 L $$atitre1 : $$b sous titre1 $$cFLAMANT
    000000002 24500 L $$atitre2 $$cFLAMANT
    000000003 24500 L $$atitre3 : $$b sous titre3 $$cFLAMANT
    000000004 24500 L $$atitre4 $$cFLAMANT
    000000005 24600 L $$atitre1 $$b sous titre1 $$cFLAMANT
    000000006 24500 L $$atitre2 $$cFLAMANT
    000000007 24700 L $$atitre3 $$b sous titre3 $$cFLAMANT
    000000008 24500 L $$atitre4 $$cFLAMANT
    --re-interval permet d'interpréter correctement les {}
    '(/^[0-9]{9} 24500 L/ && $5 ~ /\$\$b/) indique que les lignes à traiter commencent par 9 chiffres, puis un espace, le nombre 24500, un espace et la lettre L (à adapter en fonction des besoins) ET que ces lignes doivent contenir $$b en 5ème champ
    Le reste est identique...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Yes super, je crois qu'avec cet exemple je pourrais faire meme d'autres modifs.
    Merci pour tout !!!
    Ciao

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

Discussions similaires

  1. [KSH] ajouter des saut de lignes tous les 200 caractères dans un fichier
    Par twixi dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 09/10/2012, 15h58
  2. Ajout de caractère dans un fichier
    Par toitoine01 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 07/03/2008, 10h36
  3. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  4. Réponses: 5
    Dernier message: 25/01/2005, 14h26
  5. Ajout de texte dans un fichier
    Par willowII dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 24/08/2004, 19h30

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