awk et le caractere spécial *

awk et le caractere spécial * - Shell/Batch - Programmation

Marsh Posté le 05-10-2012 à 15:32:41    

Bonjour,  
 
J’ai différents fichiers d'entrée : fichier1_rose fichier2a_rose fichier1_bleu  fichier3_bleu
Je souhaite faire une boucle sur l’ensemble des fichiers et récupérer des informations via un programme awk.
Le problème est de savoir comment écrire * sous forme awk ( partie en rouge qui ne fonctionne)
 
var1="rose"        
 
for  tri in `ls fichier*`
do    
gawk -v $var1=var1  '{ mon prog}
   END { if (FILENAME=="fichier*"_"var1" ) {print " le caractere etudie est " var1 }}                
' $tri > "$tri"_final
done
 
Merci pour votre aide
 
 

Reply

Marsh Posté le 05-10-2012 à 15:32:41   

Reply

Marsh Posté le 05-10-2012 à 16:29:41    

salut,

 

d'abord, `for i in $(commande)' est une très mauvaise chose
simplement `for i in fichier*'

 

ensuite je suis certain que awk ne sert à rien ici.

 

c'est quoi, du bash ? ou du POSIX ?
si c'est du bash, il possède des remplacements de paramètres plus étendus qu'un shell POSIX, qui te permettront de ne retenir d'une variable que ce qui t'intéresse, sans tr, ni sed, ni awk.


Message édité par Profil supprimé le 05-10-2012 à 16:33:59
Reply

Marsh Posté le 05-10-2012 à 20:50:09    

Merci pour l'astuce for i in fichier*  
C'est du bash
Awk me sert ici (car je ne sais pas faire autrement) . J'ai raccourci mon programme mais j'ai quelques conditions à remplir afin d'incrementer mon fichier de sortie

Reply

Marsh Posté le 05-10-2012 à 23:21:12    

admettons.
alors, c'est peut-être la boucle `for' qui est en trop.

Code :
  1. $ touch fichier1_rose fichier2a_rose fichier1_bleu  fichier3_bleu
  2. $ for f in fichier*; do echo "foo" > "$f"; done # jusque là, c'était pour avoir quelque chose à faire traiter à `awk'
  3. $ var1=rose
  4. $ awk -v var1="$var1" '{
  5. if(FILENAME ~ "^fichier.*_"var1"$" ) # * est un caractère spécial pour awk uniquement dans les regex
  6. print FILENAME}' fichier*
  7. fichier1_rose
  8. fichier2a_rose


Message édité par Profil supprimé le 05-10-2012 à 23:21:42
Reply

Marsh Posté le 06-10-2012 à 14:40:51    

Ca fonctionne merci
Je ne savais pas que l'on pouvais mettre en entrée les fichiers sous cette forme : fichier*. Du coup j'abandonne la boucle.
1 question sur le code : comme il ya le caractere * tu es obligé d'entourer le fichier par les 2 symboles ^.

Reply

Marsh Posté le 06-10-2012 à 15:09:13    

Citation :

comme il ya le caractere * tu es obligé d'entourer le fichier par les 2 symboles ^.

non, c'est pour éviter que, par exemple, le_fichier2_rose, ou fichier1_rose_123, correspondent à la recherche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed