Forum Programmation.shell Recherche remplace champ avec condition

Posté par  .
Étiquettes : aucune
0
8
mar.
2006
Bonjour,
J'ai un soucis de performance donc je cherche des solutions type awk voir perl.
Pour toutes les lignes commencant par ACT, je veux remplacer la valeur du champ 12 avec celle du champ 14 si la valeur du champ 12 commence.
Pour l'instant j'ai une boucle qui prend toutes les lignes commencant par ACT et je teste si le champ 12 commence par zéro, si oui je fais un sed. Pour plus de performance, j'ai voulu contstruire un fichier avec les chaine sed de remplacement (s/ligne1/ligne2/g) pour exécuter un sed -f avec ce fichier en critère. Mais le sed avec fichier en critère ne fonctionne pas avec un gros fichier en critere.
La solution si elle existe serait de ne plus passer par un boucle.

exemple de ligne (séparateur = ~)
ENT~xxxxxx~20060101,000000~20060301,000000
ACT~xxxxxxxx~~xxxxxxxxxxx~xxxxxx~xxxxxxx~xxxxxx~x~xxxxxxxx~xxxxxx~x~0051~01~6020~01~~~0~~~294522~269824~0~~20060101,001500
ENA~xxxxxxxx~xxxxxx~20060101,001500~~0~20060101,004737~xxxxxxxxxxx~7~

ici sur la ligne ACT le champ 12 est 0051 il doit etre remplacé par 6020 car il commence par 0.
Merci d'avance pour votre aide. hugo.
  • # l'instruction sed

    Posté par  . Évalué à 1.

    Est ce que c'est un truc de ce style que tu cherches à faire :
    sed -u -i -e 's/^\(ACT\(~[^~]*\)\{10\}\)~0[^~]*\(~[^~]*~\)\([^~]*\)\(~.*\)$/\1~\4\3\5/g' mon_fichier

    soit : modification directe des lignes du fichier commençant par ACT dont le 12eme champs commence par 0 => le 12eme champs est supprimé, le champs 14 est mis à sa place les champs 13, 15 et suivants sont mis à la suite.

    Teste sur une copie du fichier pour voir si ça donne ce que tu veux (j'espère que je ne me suis pas planté :) ).

    Hein ? Comment ça c'est pas intuitif ? \(^o^)/
    • [^] # Re: l'instruction sed

      Posté par  . Évalué à 0.

      En effet c'est un truc comme ca sauf que je ne voulais pas supprimer le champs 14 juste le dupliquer en 12. Mais c'est bon j'ai réussi, merci quand même. Bonne journée.
      • [^] # Re: l'instruction sed

        Posté par  . Évalué à 1.

        Mouais, je suppose que remplacer \1~\4\3\5 par \1~\4\3\4\5 dans la 2eme partie de l'instruction s/// du sed n'a pas du être bien difficile :-\
        Sinon, je suis vraaaaaaiiiiiiiiiimmmmmmeeeeeeeennnnnnnntttttt content d'avoir pu t'aider .....

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.