J'ai un problème
1) J'ai une un fichier qui contient des patterns a remplacer sous forme de regex et la pattern qui les remplace
Replacement pattern ; Matching patterns regex
EXTRACT REGLES______________
toto ; tutu | tata | tonton | titi
bobo ; bibi | baba | bubu | bebe
etc. 14000 lignes !!!
2) J'ai un fichier cible dans lequel je veux appliquer ces regles
EXTRACT INPUT _______________
hello my name is bob and I am a Titi and I like bubu
Mon but est alors d'obtenir
EXTRACT OUTPUT ______________
hello my name is bob and I am a toto and I like bobo
Actuelement j'essaye de faire ça avec awk comme cela :
par exemple pour un remplacement :
echo 'toto; tutu | tata | tonton | titi ' | awk '{gsub(/ tutu | tata | tonton | titi /," toto ")}1'
me donne
toto; toto | toto | toto | toto
avec
awk -F';' 'NR==FNR{A[$1]=$2; next} IGNORECASE = 1 {for(i in A) gsub(/A[i]/,i)}1’ INPOUT OUTOUT
je comptais :
1. enregistrer un array A avec $2 en contenu $1 en index
pour la premiere ligne de EXTRACT REGLES donc
$2 =' tutu | tata | tonton | titi '
$1 = ' toto '
2. remplacer avec gsub(/$2/,$1)}1
donc toujours pour la premiere ligne de EXTRACT REGLES je comptais obtenir :
awk 'IGNORECASE = 1 {gsub(/ tutu | tata | tonton | titi /," toto ")}1
malheureusement awk n'a pas l'air de comprendre la regex… j'ai réussi aussi a faire quelque chose avec sed mais c'est trop lent :(
est ce que vous auriez une idée ?
merci !!
# sed
Posté par gaaaaaAab . Évalué à 2.
Tu peux poster ton script sed ?
Si c'est trop lent avec sed, je ne suis pas super optimiste sur les perfs d'un script awk …
# un truc du genre ...
Posté par totof2000 . Évalué à 3.
en mettant ton $2 entre quotes dans ton expression ça marchera peut-être ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.