Problème script awk !! =/

Problème script awk !! =/ - Shell/Batch - Programmation

Marsh Posté le 15-10-2011 à 21:34:29    

Bonjour,
tout d'abord je m'excuse de poser ma question dans la catégorie "Shell" au lieu de "Awk" mais cette dernière n'existant pas je n'avait pas vraiment le choix..  
Bref, ce n'est pas le plus important ! ;)
Voilà mon problème : très débutante en Système j'ai tenté d'écrire mon premier programme "essai.awk" qui est tout simplement :  
          #! /usr/bin/awk -f  
          BEGIN {  
            print $1  
          }  
          awk -f essai.awk /etc/passwd
 
pour tenter d'afficher la même chose que la commande suivante (qui par ailleurs fonctionne parfaitement bien) :  
          awk -F : '{print $1}' /etc/passwd
 
Le problème c'est que quand j'ai fait mon ./essai.awk dans mon terminal il m'affiche l'erreur suivante :  
          awk: 5: unexpected character '.'
 
Donc voilà je ne comprends vraiment pas pourquoi il ne m'accepte pas la dernière ligne du script et plus précisément le ".", de "essai.awk" je suppose n'ayant pas d'autres "." sur la ligne !
Merci beaucoup d'avance à tous ceux plus avertis que moi sur le sujet et qui auront la gentillesse de me répondre !! :)

Reply

Marsh Posté le 15-10-2011 à 21:34:29   

Reply

Marsh Posté le 15-10-2011 à 22:36:10    

S'il vous plait c'est vraiment urgent !! Est_ce que quelqu'un voit où se trouve mon erreur ?? :p
Merciiiiiiiiiii !!!

Reply

Marsh Posté le 16-10-2011 à 00:13:52    

Vérifies bien ce que tu tapes, car si je fais:

Code :
  1. BEGIN {  FS = ":" }  
  2. { print $1 }


dans un fichier essai.awk (faut pas mettre ton print dans le BEGIN, hein)
et que je tape awk -f essai.awk essai.txt  
ou essai.txt contient

aa1 : aa
bb2 : bb
cc3 : cc


ça me donne le résultat attendu:

C:\MKSNT>awk -f essai.awk essai.txt
aa1
bb2
cc3


 
De toutes façon, laisse tomber awk qui est antédiluvien, et passes à Perl qui est bien plus facile a utiliser et puissant.
 
A+,


Message édité par gilou le 16-10-2011 à 00:14:45

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-10-2011 à 10:03:01    


 
Bonjour
awk est un langage de traitement de flot (de données). Sa syntaxe de base est donc

Code :
  1. awk '{... code de traitement ...}' flot_de_donnees

ce que tu as avec

Code :
  1. awk -F : '{print $1;}' /etc/passwd


 
Toutefois, quand le code de traitement devient très très complexe, cela devient alors difficile de le placer en ligne de commandes. Possible bien sûr mais difficile. Exemple: le même code que ci-dessus mais qui ne prend que les uid > 100 et qui affiche 3 fois chaque info

Code :
  1. awk -F : '{if ($3 > 100) {for (i=0; i < 3; i++) {print $1;}}}' /etc/passwd


 
Dans ce cas, on travaille alors en 2 étapes
1) on crée un fichier à part dédié au code de traitement. On nomme par convention ce fichier ".awk". Ce fichier peut alors être écrit de façon plus claire, comme ceci

Code :
  1. {
  2.     if ($3 > 100)
  3.     {
  4.         for (i=0; i < 3; i++)
  5.         {
  6.             print $1;
  7.         }
  8.     }
  9. }


 
2) on appelle awk en lui indiquant (-f) que le code de traitement se trouve dans le fichier .awk écrit précédemment

Code :
  1. awk -F : -f toto.awk /etc/passwd


 
Toi tu as tenté de mixer les 2 façons en une seule ce qui ne peut pas marcher. Soit tu mets le code complet dans ta ligne de commande, soit tu mets le code à part et, dans ta ligne de commande, tu indiques où trouver le code. Mais tu ne peux pas mettre ta ligne de commande dans le fichier ".awk"...


Message édité par Sve@r le 16-10-2011 à 10:04:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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