Forum Programmation.autre AWK remplacer les patterns d'un fichier cible avec un fichier liste de regex

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
19
déc.
2017

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  . Évalué à 2.

    j'ai réussi aussi a faire quelque chose avec sed mais c'est trop lent :(

    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  . Évalué à 3.

    awk 'BEGIN { E = "tata|titi|tutu"} {gsub('E',"toto");print $0}'
    
    

    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.