Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1128 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

   awk et le caractere spécial *

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

awk et le caractere spécial *

n°2159283
iguanic
Posté le 05-10-2012 à 15:32:41  profilanswer
 

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
 
 

mood
Publicité
Posté le 05-10-2012 à 15:32:41  profilanswer
 

n°2159303
Profil sup​primé
Posté le 05-10-2012 à 16:29:41  answer
 

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
n°2159352
iguanic
Posté le 05-10-2012 à 20:50:09  profilanswer
 

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

n°2159371
Profil sup​primé
Posté le 05-10-2012 à 23:21:12  answer
 

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
n°2159396
iguanic
Posté le 06-10-2012 à 14:40:51  profilanswer
 

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 ^.

n°2159397
Profil sup​primé
Posté le 06-10-2012 à 15:09:13  answer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

   awk et le caractere spécial *

 

Sujets relatifs
Insertion de caractère dans un nom de mes champs XMLRécupérer les nombres d'une chaine de caractère ???
remplacer un caractère dans une chaineSi *.txt existe et si *.txt de plus de 4h alors...
Macro Excel -> ajouter un caractère dans une celluleFPDF et caractère spéciaux
impossible de créer un vecteur de 32000 * 32000 shorttableau de chaine de caractère : enregistrement
[Débutant] Module Turtle et TkinterCaractere de retour a la ligne
Plus de sujets relatifs à : awk et le caractere spécial *


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR