[Shell] soucis avec AWK

soucis avec AWK [Shell] - Shell/Batch - Programmation

Marsh Posté le 03-10-2012 à 14:36:10    

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
Reply

Marsh Posté le 03-10-2012 à 14:36:10   

Reply

Marsh Posté le 03-10-2012 à 20:43:28    

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
Reply

Marsh Posté le 03-10-2012 à 20:45:40    

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


---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 04-10-2012 à 23:05:25    

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.

Reply

Sujets relatifs:

Leave a Replay

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