ptite aide gawk pour afficher la ligne que je veux

ptite aide gawk pour afficher la ligne que je veux - Shell/Batch - Programmation

Marsh Posté le 04-10-2005 à 16:10:49    

Salut les gars :)
je voudrais faire la chose suivante : je veux savoir là où ya marqué "Error" dans mon fichier "donnees.dat" et afficher la 5è ligne qui suit ce "Error", ce que je peux illustrer par le script suivant :
 

#!/bin/bash
 
gawk ' BEGIN { FS=" = "}
  $2 == "Error" { NR=NR+5 ; print $0 }
  END { }' donnees.dat
 


 
comme vous pouver vous en douter le NR=NR+5 ne marche pas. Quelqu'un saurait comment faire ?

Reply

Marsh Posté le 04-10-2005 à 16:10:49   

Reply

Marsh Posté le 04-10-2005 à 17:40:07    

je crois que ça marche avec :
 

#!/bin/bash
 
gawk ' BEGIN { FS=" = " }
  $2 == "Error" { getline;getline;getline;getline;getline; print $0 }
  END { }' donnees.dat


 
mais c'est pas hyper joli. mais bon tant que ça marche. si qq'un a mieux :)
 
j'ai trouvé un super poly de l'ensimag sur awk/gawk : http://ploug.eu.org/doc/principe-awk-lacroix.pdf
 
merci.

Reply

Marsh Posté le 05-10-2005 à 13:29:37    

Une solution parmis tant d'autres ...
 

gawk '
BEGIN { FS=" = " ; NR5 = 0 }
{
if ( $2 == "Error" ) {
        NR5 = NR + 5 ; next
} else {
        if ( NR == NR5 ) { print $0 ; next } { next }
}
}' donnes.dat



---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 05-10-2005 à 15:41:37    

Merci Deadlock  :)  
 
Et sinon dernière question parce que celle là je vois vraiment pas....  :??:  
Ya moyen d'utiliser ds un gawk une variable shell?
du genre
 


#!/bin/bash
read var
 
gawk ' BEGIN { FS="="}
$1 == "variable_a_modifier" {$2 = system("echo $var" )}
END {}' fichier_a_modifier


 
je voudrais bien entendu lire une variable au clavier et que mon script ci dessus modifie l'affectation de "variable_a_modifier" dans le "fichier_a_modifier". là ça marche pas ça l'affiche à l'écran, et encore avec un export de var....
 
Merci les gars, en particulier Deadlock qui répond présent à chaque fois que je post  :jap:  
 

Reply

Marsh Posté le 05-10-2005 à 16:19:13    

Pour passer une variable Shell à AWK tu utilises l'option -v :

read var
gawk -v AwkVar=$var ' BEGIN ...


La variable AwkVar dans le code awk aura la valeur de $var du shell ;)


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 05-10-2005 à 16:43:22    

Merci Deadlock, t'es vraiment trop compétent.... :jap:

Reply

Marsh Posté le 06-10-2005 à 05:07:18    

Ceci dit, au-delà de 10 lignes, je lâcherais awk pour perl (plus facile à apprendre, rapide, pratique).

Message cité 1 fois
Message édité par el muchacho le 06-10-2005 à 05:12:42

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 06-10-2005 à 08:05:23    

el muchacho a écrit :

Ceci dit, au-delà de 10 lignes, je lâcherais awk pour perl (plus facile à apprendre, rapide, pratique).

Ca dépend du "passif" ... je suis sysadmin depuis plus de 12 ans, quand j'ai commencé, perl n'existait pas, donc j'ai pris l'habitude de scripter en AWK ... et celà pour du code dépassant parfois largement la 100aine de lignes. Perl, je fais joujou avec mais c'est tout ... c'est peut être plus rapide (et plus puissant via les modules) mais je n'en ai pas l'utilité, sauf dans de rares cas pour des accès oracle via DBI/DBD.


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Sujets relatifs:

Leave a Replay

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