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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell] soucis avec AWK

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell] soucis avec AWK

n°2158981
Sndk
Hardcore Gamer
Posté le 03-10-2012 à 14:36:10  profilanswer
 

Bonjour à tous,
 
je dois créer un script avec une mission bien précise, chercher des occurrences dans des fichiers triés et remonter les lignes si une valeur de ces fichiers sont supérieurs à une valeur, disons 100
 
en vrac, le tri des fichier, ici je ne prends que les fichier du 02 octobre qui contiennent rfse
 
ls -lrt | grep "Oct 02" | grep rfse
 
-rw-r--r--    1 ref      ref         1946967 Oct 02 23:30 p00_rfse_1_819230.log
-rw-r--r--    1 ref      ref         2032774 Oct 02 23:30 p00_rfse_1_766080.log
-rw-r--r--    1 ref      ref         2067338 Oct 02 23:30 p00_rfse_1_1404954.log
-rw-r--r--    1 ref      ref         2005610 Oct 02 23:30 p00_rfse_1_1360052.log
-rw-r--r--    1 ref      ref         2039719 Oct 02 23:30 p00_rfse_1_1364210.log
-rw-r--r--    1 ref      ref         2001858 Oct 02 23:30 p00_rfse_1_1273940.log
-rw-r--r--    1 ref      ref         2009087 Oct 02 23:30 p00_rfse_1_1224786.log
-rw-r--r--    1 ref      ref         2153521 Oct 02 23:30 p00_rfse_1_1445924.log
-rw-r--r--    1 ref      ref         1942355 Oct 02 23:30 p00_rfse_1_1146936.log
-rw-r--r--    1 ref      ref         2000715 Oct 02 23:30 p00_rfse_1_1138894.log
-rw-r--r--    1 ref      ref         1845453 Oct 02 23:30 p00_rfse_1_1052842.log
-rw-r--r--    1 ref      ref         2043212 Oct 02 23:30 p00_rfse_1_811252.log
-rw-r--r--    1 ref      ref         2034320 Oct 02 23:30 p00_rfse_1_585748.log
-rw-r--r--    1 ref      ref         2003198 Oct 02 23:30 p00_rfse_1_1319106.log
-rw-r--r--    1 ref      ref         2007873 Oct 02 23:30 p00_rfse_1_1233100.log
-rw-r--r--    1 ref      ref         1957100 Oct 02 23:30 p00_rfse_1_1228886.log
-rw-r--r--    1 ref      ref         1999969 Oct 02 23:30 p00_rfse_1_1016006.log
-rw-r--r--    1 ref      ref         2025960 Oct 02 23:30 p00_rfse_1_848054.log
-rw-r--r--    1 ref      ref             379 Oct 02 23:30 p00_rfse_1-router_1392758.log
-rw-r--r--    1 ref      ref           11814 Oct 02 23:30 p00_rfse_1306744.log
-rw-r--r--    1 ref      ref             314 Oct 02 23:37 p00_rfse_1-router_794872.log
 
maintenant je parse un fichier (disons le p00_rfse_1_819230.log) et ne faire apparaitre que les lignes contenant NbSolutions
 
cat  p00_rfse_1_819230.log | awk '/NbSolutions/'
 
@@@ref.6@@@ ->Backtracking route search : Time=417///NbSolutions=7
@@@ref.6 2012-10-02 23:25:50@@@ End of search engine request///Time=3993///NbSolutions=2
@@@ref.6 2012-10-02 23:26:43@@@ End of search engine request///Time=170///NbSolutions=2///CSP solutions
@@@ref.6@@@ ->Backtracking route search : Time=478///NbSolutions=4
@@@ref.6 2012-10-02 23:27:38@@@ End of search engine request///Time=6047///NbSolutions=2
@@@ref.6@@@ ->Backtracking route search : Time=322///NbSolutions=6
@@@ref.6 2012-10-02 23:28:39@@@ End of search engine request///Time=3492///NbSolutions=6
@@@ref.6 2012-10-02 23:29:33@@@ End of search engine request///Time=241///NbSolutions=6///CSP solutions
 
je cherche à isoler la valeur NbSolutions= puis de regarder si cette variable est supérieur à 100
 
et c'est que je sèche, si vous avez une piste je suis preneur, merci à vous


---------------
Mon topic - Mon Feed-Back
mood
Publicité
Posté le 03-10-2012 à 14:36:10  profilanswer
 

n°2159043
Farian
Posté le 03-10-2012 à 20:43:28  profilanswer
 

Bonsoir !
 
Pour répondre à votre problématique, j'aurais l'approche suivante :  
 
partir du fichier "filtré" et organiser la commande awk comme suit :  
=> utiliser "/" comme séparateur, ce qui vous donnera les différentes valeurs dans les champs "éclatés" par awk
 
Pour chaque ligne, boucler sur tous les champs et regarder si celui-ci contient "NbSolutions="
 
Si oui, regarder ce qu'il y a après le signe "=" et comparer ...
 
Petite proposition de script awk (à mettre dans le fichier "script.awk" ) :
{
 for (i=1;i<=NF;i++)
 {
  if (match($i,"NbSolutions=" ))
  {
   split($i, valeurs, "Solutions=" )
   if (valeurs[2] > 100)
   {
    print $0
   }
  }
 }
}
 
Et la ligne de commande associée :  
 
cat p00_rfse_1_819230.log |grep NbSolutions |awk -F/ -f script.awk
 
Dans l'exemple que je vous donne, j'affiche la ligne dont le nombre de solutions est supérieur à 100, à vous de personnaliser le script !
 
Bon courage !


Message édité par Farian le 03-10-2012 à 20:43:42
n°2159044
Sndk
Hardcore Gamer
Posté le 03-10-2012 à 20:45:40  profilanswer
 

Merci Farian pour ton sympa message, je teste ça demain, bonne soirée à toi !


---------------
Mon topic - Mon Feed-Back
n°2159229
Profil sup​primé
Posté le 04-10-2012 à 23:05:25  answer
 

salut,
 
si NbSolutions est toujours le troisième champ

Code :
  1. find ~ -type f -newermt 2012-10-02 ! -newermt 2012-10-03 \
  2.    -exec awk -F'///' '$3 ~ /^NbSolutions=[[:digit:]]*$/{split($3,a,"=" ); if(a[2] > 100)print a[2]}' {} \+

(find trouve les fichiers du 2 octobre 2012, et exécute dessus le code awk)
 
sinon, appliquer le script de Farian.


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

  [Shell] soucis avec AWK

 

Sujets relatifs
Python - Programmation - Soucis[Shell/batch] redirection dans un for /F ?
problème d'utilisation de variable shell dans un script[Shell Unix] envoi de mail : texte en PJ au lieu du corps.
Objets COM Power ShellCommande shell_exec via php
Lancement d'un shell comme s'il s'agissait d'une connexionLire un fichier en Shell avec une boucle
soucis sur une procedure sous oracle[SHELL UNIX] Fermer le terminal a la fin d un script shell
Plus de sujets relatifs à : [Shell] soucis avec AWK


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