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 Bastien Mourgues . Évalué à 1.
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 hugo_migou . Évalué à 0.
[^] # Re: l'instruction sed
Posté par Bastien Mourgues . Évalué à 1.
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.