IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Shell et commandes GNU Discussion :

AWK -Passage de deux arguments (un numéro de champ, une expression régulière) ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut AWK -Passage de deux arguments (un numéro de champ, une expression régulière) ?
    Bonjour;

    Alors tout est dans le sujet...
    Est - il possible de passer en paramètre d'un script awk, 2 paramètres... et de surtout les ré-utiliser ensuite ?

    Voici mon script AWK qui plante... avec l'erreur... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    # CheckPatternString(col:num, pattern:reg_exp)
    #
    CheckPatternString()
    {
            awk -v col=$2 -v pattern=$3 -F ';' '
                    NF>0 {
                    if ( match($col,$pattern) )
                            {
                            print "**** ERREUR dans un champ ! ligne:"NR"**** Valeur en cause :"$col"****";
                            print "****"$0"****";
                            exit 1;
                            }
                    }' $1
    }
    #
     
    [....] L'erreur obtenue :
     
    awk: Field /^Mme$|^M$|^Mlle$|^$/ is not correct.
     The input line number is 1. The file is RGEUsersVerole.csv_WBLANKS.
     The source line number is 3.
    Merci de votre aide....

    PS/ Je sais... ce awk est "debile" mais c'est en fait une sous fonction de mon programme Shell Bash SH
    En voici l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #
    # On verifie le champ 1 (Civilité)
    #
    echo "-- DEBUT -- CheckPatternString Civilite"
    RegExpCivilite="^Mme$|^M$|^Mlle$|^$";
    CheckPatternString $FIC_ENTREE_WBLANKS 1 $RegExpCivilite
    if [ $? != 0 ]; then
            {
                    CatchError
                    Error "001" $FIC_ENTREE $FIC_ENTREE_WBLANKS
            }
    fi
    echo "-- FIN -- CheckPatternString Civilite"

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CheckPatternString()
    [...]
    if ( match($col,/$pattern/) )
    [...]
    => Plus d'erreur.
    ===> Mais le pattern n'est pas du tout respecter !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    De meme avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CheckPatternString()
    [...]
     if ( match($col,/${pattern}/) )
    # Les parenthes en plus...
    [...]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    De meme avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     if ( match($col,/$pattern/) )
     
    #et
    #DANS LE MAIN 
    {
     
    RegExpCivilite="\^Mme\$\|\^M\$\|\^Mlle\$\|\^\$";
     
    }

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Par défaut
    Bonjour,

    $pattern référence la valeur de la colonne N°pattern...

    Voici comment procéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo 'toto abc abcf abcde'|awk -v pattern="abc(d|e)" -v col=3 '$col ~ pattern'
    $ echo 'toto abc abcf abcde'|awk -v pattern="abc(d|e)" -v col=4 '$col ~ pattern'
    toto abc abcf abcde

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 155
    Par défaut
    Mouais; j'ai essayé avec le comparateur ~ ... Pas mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     syntax error The source line is 4.
     The error context is
                                    $col !~ pattern >>>     { <<<
     awk: The statement cannot be correctly parsed.
     
    #OK Je mets un $.... et bien non
     syntax error The source line is 4.
     The error context is
                                    $col !~ $pattern >>>  { <<<
     awk: The statement cannot be correctly parsed.
     The source line is 4.
     syntax error The source line is 9.
    Autre idée...?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. awk ou sed : Supprimer argument entre doubles quotes sur une ligne de fichier
    Par SuperJoker dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/05/2014, 21h08
  2. Utilisation d'une expression régulière dans un AWK
    Par Nattiz dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/08/2013, 21h08
  3. Méthode retournant deux arguments
    Par Anabel dans le forum Langage
    Réponses: 4
    Dernier message: 30/05/2006, 16h34
  4. fonction à deux arguments
    Par bobic dans le forum ASP
    Réponses: 3
    Dernier message: 26/04/2006, 22h05
  5. passage de "\\" en argument
    Par Pystakus dans le forum C
    Réponses: 2
    Dernier message: 19/09/2003, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo