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 :

commande SED - rechercher et remplacer : faire une incrémentation


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Par défaut commande SED - rechercher et remplacer : faire une incrémentation
    Bonjour,

    J'ai une question un peu avancée (pour moi) sur SED. Je l'utilise déjà un peu pour des recherches basiques mais la c'est un peu plus compliqué :

    Dans le texte suivant :

    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 6
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 8
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat00325_EUR,THEO/Value,EUR # index 10

    Je souhaite :

    1/ Rechercher le pattern Cash Instrument,*,THEO/Value
    2/ Pour les lignes trouvées qui on ce pattern précis, incrémenter le chiffre après index de +1

    Sur le shéma ci dessus cela donnerait :

    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 7
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 9
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat00325_EUR,THEO/Value,EUR # index 10


    Comment faire avec sed ?

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    tu es typiquement dans un cas où il faut basculer vers awk:
    • Le fichier est organisé en "champs"
    • sed ne sait pas faire d'arithmétique contrairement à awk


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat cashinstru.txt 
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 6
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 8
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat00325_EUR,THEO/Value,EUR # index 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ awk -F',' '(($2=="Cash Instrument")&&($4=="THEO/Value")){split($5,ch," ");sub(ch[4],ch[4]+1,$0)} 1' cashinstru.txt 
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 7
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 9
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat00325_EUR,THEO/Value,EUR # index 11

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Au temps pour moi, il y a une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ awk -F',' '(($2=="Cash Instrument")&&($4=="THEO/Value")){split($5,ch," ");sub(ch[4],ch[4]+1,$0)} 1' cashinstru.txt 
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 7
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 9
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat0032511_EUR,THEO/Value,EUR # index 10
    La bonne formule est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ awk -F',' '(($2=="Cash Instrument")&&($4=="THEO/Value")){split($5,ch," ");sub(ch[4]"$",ch[4]+1,$0)} 1' cashinstru.txt 
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,THEO/Value,SEK # index 7
    InstrumentAttribute,Cash Instrument,FlatForFx_SEK,Position Units, # index 7
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,THEO/Value,EUR # index 9
    InstrumentAttribute,Cash Instrument,Cat00275_EUR,Position Units, # index 9
    InstrumentAttribute,Cash Instrument,Cat0032510_EUR,THEO/Value,EUR # index 11

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Par défaut
    Hello,

    Merci de votre réponse, le premier code semblait fonctionner

  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
    oui c'est beaucoup plus facile avec awk dès qu'il y a du calcul ou des conditions imbriquées à faire ou meme des boucles... de façon général
    reserver sed à de la pure édition selective, à la chaine

    se souvenir de ça permet en général de ne pas perdre de temps à chercher une solution dans la mauvaise direction...

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

Discussions similaires

  1. [LabvieW 9.0](Debutant) Faire une incrémentation
    Par MartyAlencar dans le forum LabVIEW
    Réponses: 11
    Dernier message: 27/04/2010, 11h03
  2. [Bénévole] Recherche personne pour faire une Equipe d'administation
    Par Totof008 dans le forum Autres
    Réponses: 0
    Dernier message: 02/06/2009, 09h12
  3. [C#] Recherche tutorial pour faire une calculatrice
    Par Johann7751 dans le forum C#
    Réponses: 4
    Dernier message: 22/05/2009, 16h18
  4. faire une incrémentation
    Par starr dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/06/2008, 17h57
  5. [RegEx] Recherche et Remplacement d'une chaîne dans un fichier
    Par jpascal dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2007, 19h35

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