Outils pour utilisateurs

Outils du site


linux:scripts_awk:start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
linux:scripts_awk:start [13/03/2010 15:44] – rmqs locales daniellinux:scripts_awk:start [17/10/2019 11:11] (Version actuelle) – [Lister les IP et le nb d'accès d'un log www] daniel
Ligne 1: Ligne 1:
 ====== Scripts awk ====== ====== Scripts awk ======
- +Docs 
-Une doc sur awk : http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html +  http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html 
- +  * https://www.tutorialspoint.com/awk/index.htm 
-Quelques règles et bout de scripts (cf http://cli.asyd.net/home/filtres/awk)+  * [FR] http://www.shellunix.com/awk.html
  
 Attention aux locales !!! (merci à Christophe Martin de la liste shell@asyd.net), autant pour le séparateur décimal (la virgule en fr) que les règles de collation min/maj : Attention aux locales !!! (merci à Christophe Martin de la liste shell@asyd.net), autant pour le séparateur décimal (la virgule en fr) que les règles de collation min/maj :
Ligne 30: Ligne 30:
  
 ===== Syntaxe ===== ===== Syntaxe =====
 +
 ==== Boucle for ==== ==== Boucle for ====
 <code awk> <code awk>
Ligne 38: Ligne 39:
   print "\""fich"\";"$6";"$7";"$5   print "\""fich"\";"$6";"$7";"$5
 }' }'
 +</code>
 +
 +==== Lister les IP et le nb d'accès d'un log www ====
 +<code awk>
 +awk '{nb[$1]++} END {for (ip in nb) print ip "\t" nb[ip]}' < access.log
 +</code>
 +
 +Ou si on veut le reverse
 +<code awk>
 +awk '{nb[$1]++} END {for (ip in nb) {system("/usr/bin/host " ip "|cut -d '"' '"' -f 5;print "\t" ip "\t" nb[ip]}}' < access.log
 +</code>
 +
 +==== Compter les hits et afficher les heures qui dépassent un nb de hits ====
 +
 +<code awk>
 +awk -F : '{nb[$2][$3]++} END {for (h in nb) {for (m in nb[h]) if (nb[h][m] > 9999) printf("%s:%s %d\n", h, m, nb[h][m])}}' < access.log > access.highfreq.log
 </code> </code>
 ===== Exemples ===== ===== Exemples =====
 +
  
 ==== Découper un fichier ==== ==== Découper un fichier ====
Ligne 51: Ligne 69:
 </code> </code>
  
 +
 +
 +==== Monitoring de processus ====
 +<code bash>
 +#!/bin/bash
 +NBMES=10
 +INTER=0.5
 +SLEEP_DELAY=1
 +PROCESS=java
 +
 +function usage() {
 +  echo "usage: $(basename $0) -n <nb de mesures> -i <intervalle entre deux mesures> -s <duree d'attente avant de retester pour relancer une série> -p <process à surveiller>"
 +  echo "Tous les arguments sont facultatifs";
 +  echo "Par défaut on a $NBMES mesures, toutes les ${INTER}s avec un délai de ${SLEEP_DELAY}s entre deux tests sur le process $PROCESS"
 +  exit;
 +}
 +  
 +while getopts "n:i:s:p:h" OPTION
 +do
 +  case $OPTION in
 +    n ) NBMES=$OPTARG;;
 +    i ) INTER=$OPTARG;;
 +    s ) SLEEP_DELAY=$OPTARG;;
 +    p ) PROCESS=$OPTARG;;
 +    h ) usage;;
 +  esac
 +done
 +
 +PID=''
 +while [ "$PID" = '' ]
 +do
 +  sleep $SLEEP_DELAY
 +  PID=$(pidof $PROCESS|awk '{print $1}')
 +  while [ "$PID" != '' ]
 +  do
 +    echo "Y'a un $PROCESS qui tourne, on fait $NBMES mesures en $(echo "$NBMES * $INTER"|bc)s"
 +    top -b -n $NBMES -d $INTER -p $PID|env LANGUAGE=C LANG=C awk -v pid=$PID '
 +BEGIN {
 +  minC=100; maxC=0; moyC=0; minM=100; maxM=0; moyM=0.0;i=0
 +}
 +$0 ~ pid {
 +  i++;
 +  if ($9 <minC) {minC=$9};
 +  if ($9 > maxC) {maxC=$9};
 +  moyC += $9;
 +  if ($10 <minM) {minM=$10};
 +  if ($10 > maxM) {maxM=$10};
 +  moyM += $10;
 +  print "CPU: " $9 "% \tRAM: " $10 "%"
 +}
 +END {
 +  if (i>0) {
 +    print "Sur " i " itérations";
 +    print "CPU => min: " minC "\tmax: " maxC "\tmoy " moyC/i;
 +    print "RAM => min: " minM "\tmax: " maxM "\tmoy " moyM/i;
 +  }
 +  else {
 +    print "Aucune itération sur le PID " pid;
 +  }
 +}'
 +    PID=$(pidof java|awk '{print $1}')
 +  done
 +  echo "Pas de process $PROCESS en cours, on attend ('Ctrl + c' pour arrêter)"
 +done
 +</code>
linux/scripts_awk/start.txt · Dernière modification : 17/10/2019 11:11 de daniel