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

Linux Discussion :

[AWK]expression régulière variable


Sujet :

Linux

  1. #1
    Membre à l'essai
    [AWK]expression régulière variable
    Bonjour,

    je souhaite faire un script me permettant de comparer les noms des fichiers contenus dans deux répertoires ($rep1 et $rep2 dans le code).
    Les fichiers que je souhaite comparer sont soumis à expression régulière (dans l'exemple, il s'agit de /(c|cpp)$/).
    Je souhaite cependant pouvoir comparer de nombreuses paires de répertoires, chacune soumise à expression régulière différente (un autre répertoire pourrait n'être soumis qu'à /h$/ par exemple).

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ls $rep1 | awk '$0 ~ /(c|cpp)$/ {print $0}' | while read fic
            do
              [[ ! -f $rep2/$fic ]] && echo $fic >> $fichier_resultat
            done


    Mon soucis, c'est que je n'arrive pas à intégrer une expression régulière variable dans mon awk : pour pouvoir comparer 12 paires de répertoires (et donc, requérant 12 expressions régulières différentes), je suis obligé de dupliquer le bout de code que je vous ai donné 12 fois... En ne changeant que l'expression régulière à chaque fois ! C'est frustrant.

    Si quelqu'un sait comment gérer les expressions régulières variables dans un awk, je lui suis d'avance reconnaissant de me faire profiter de ses connaissances.

    Gari.

  2. #2
    Membre à l'essai
    C'est génial d'exposer son problème sur le forum... Ca fait bien réfléchir, ça oblige à bien expliquer le problème...

    Et ça permet de trouver la réponse tout seul en 5 minutes, alors que ça fait 2 jours que je galère sur le problème

    Je donne la solution :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    regex="(c|cpp)$"
    ls $rep1 | awk '$0 ~ /'"$regex"'/ {print $0}' | while read fic
            do
              [[ ! -f $rep2/$fic ]] && echo $fic >> $fichier_resultat
            done


    Merci à tous pour votre aide précieuse

###raw>template_hook.ano_emploi###