Création
d'entreprise
Posez votre question Signaler

Script Shell et Awk [Résolu]

Morgoths 4Messages postés 21 avril 2010Date d'inscription 21 avril 2010Dernière intervention - Dernière réponse le 21 avril 2010 à 17:10
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
Lire la suite 

Script Shell et Awk »

6 réponses
Réponse
+1
moins plus
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}'
$ 
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
hello
essaye avec
cat $FICHIER_IN | awk  -F ',' ''"${VOLID}"' && $1 !~ /^single/ {print $2}'

lire:
quote quote guillemet ${VOLID} guillemet quote
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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}'

Ajouter un commentaire
Réponse
+0
moins plus
ok merci je test ça
Ajouter un commentaire
Ce document intitulé « Script Shell et Awk » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?