Script Shell et Awk

Résolu
Morgoths Messages postés 4 Statut Membre -  
Morgoths Messages postés 4 Statut Membre -
Bonjour à tous,

Voila j ai un petit problème avec un script qui utilise un awk

Voici un extrait de mon fichier d'entrer:

ptsas00,0002,Online,Normal,Normal,2107-900,FB 512,P0,Standard,DS,15.0,-,31457280,V0,31457280,legacy    
oracle00,0003,Online,Normal,Normal,2107-900,FB 512,P0,Standard,DS,60.0,-,125829120,V1,125829120,legacy    
testqual00,0004,Online,Normal,Normal,2107-900,FB 512,P0,Standard,DS,12.0,-,25165824,V0,25165824,legacy    
exploit00,0005,Online,Normal,Normal,2107-900,FB 512,P0,Standard,DS,24.0,-,50331648,V4,50331648,legacy


Donc un fichier bien formater avec comme séparateur une virgule

En gros jeu veux faire un script qui permette, en lui passant un ou plusieurs paramètres,
De retourner la deuxième colonne des lignes qui contiennent mon ou mes paramètres dans la 14ème colonne ^^

Très simple n'est-ce pas ?

De plus il ne faut pas que la première colonne commence par le mot "single"

Donc voila mon script :

VOLID='('    

for i in $@     
do     

VOLID=$VOLID'($14=='\"$i\"')||'    

done     

VOLID=$VOLID'(1==0))'    

cat $FICHIER_IN | awk  -vvolid=$VOLID  -F ',' '( volid && ( $1 !~ /^single*/)) {print $2}'


Donc mon problème est qu'avec la condition écrit en dur tout fonctionne, quand j'utilisai la variable VOLID qui contient ma condition avec tous les paramètres «($14=="V9")||($14=="V3")||(1==0)»,

La fonction awk me renvoi toutes les lignes du fichier sans tenir compte de mes paramètres ^^

J'espère que cela est assez claire

Cela fait plusieurs jours que je bloque dessus XD.

Si quelqu'un peu m'aider ce serait sympa.

Pour info, au final cela doit fonctionner sous AIX

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    je pense que awk ne comprend pas que la variable volid contient un test à interprèter. J'utilise la variable VOLID du shell dans awk, chez moi ça fonctionne

    $ ./f1 V4 
    0005
    $ ./f1 V4 V0
    0002
    0004
    0005
    $ 
    $ head f1
    #!/bin/sh
    
    VOLID='('  
    for i in $@   
    do   
    VOLID=$VOLID'($14=='\"$i\"')||'  
    done   
    VOLID=$VOLID'(1==0))'  
    cat fichier | awk -F ',' ''"${VOLID}"' && $1 !~ /^single/ {print $2}'
    $ 
    
    1
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    autre méthode, on crée un fichier de commande awk
    j'utilise cat, plus pratique que echo si il y a plusieurs lignes
    VOLID='('  
    for i in $@   
    do   
    VOLID=$VOLID'($14=='\"$i\"')||'  
    done   
    VOLID=$VOLID'(1==0))'  
    cat << XX >  /tmp/f1.awk
    ${VOLID} && \$1 !~ /^single/ {print \$2}
    XX
    awk -F ',' -f /tmp/f1.awk fichier
    
    1
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    essaye avec
    cat $FICHIER_IN | awk  -F ',' ''"${VOLID}"' && $1 !~ /^single/ {print $2}'

    lire:
    quote quote guillemet ${VOLID} guillemet quote
    0
  4. Morgoths Messages postés 4 Statut Membre
     
    merci de ton aide

    je viens de tester sans succès

    il me semble que pour utiliser une variable dans le awk tu est obligé de passer par l'option -v nan ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Morgoths Messages postés 4 Statut Membre
     
    haaaaa MERCIIII

    j'ai modifier un peu le jeu des guillemets et tout fonctionne parfaitement

    merci beaucoup tu me tire une belle épine du pied

    VOLID='('  
    for i in $@   
    do   
    VOLID=$VOLID'($14=='\"$i\"')||'  
    done   
    VOLID=$VOLID'(1==0))'  
    cat $FICHIER_IN | awk -F ',' ' '${VOLID}'&& ($1 !~ /^single/) {print $2}'
    
    
    0
  7. Morgoths Messages postés 4 Statut Membre
     
    ok merci je test ça
    0