Date actuelle : 09-03-2010, 07:06 AM Bienvenue, Visiteur ! (IdentificationS'enregistrer)


Poster une réponse 
 
Note de cette discussion :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Exemples d'utilisation de awk
Auteur Message
cep Hors ligne
Admin
*******

Messages : 142
Inscription : Jul 2009
Message : #1
Exemples d'utilisation de awk
Awk est un programme permettant, entre autre, de consulter un fichier ou toute autre donnée et d'en extraire précisément certains éléments et les mettre en forme.
Je vais montrer avec quelques exemples l'utilisation de awk à l'usage des débutants, en prenant comme base le fichier /proc/net/wireless, fichier qui donne l'état de la connexion wifi, y compris la force du signal.

Il existe plusieurs programmes awk, nawk, gawk. Sur mes systèmes j'installe gawk, un peu plus complet que awk et la commande awk est redirigée automatiquement vers gawk. Sur une Debian le vérifier par la commande : update-alternatives --display awk

Point de départ : la lecture du fichier /proc/net/wireless nous renseigne sur la connexion wifi :

:~$ cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
wlan0: 0000 56. -54. -256 0 0 0 0 0 0

la troisième ligne nous donne l'interface wlan0 et dans la troisième colonne la force du signal. On pourrait donc faire :
grep wlan0 /proc/net/wireless
pour afficher la totalité de la ligne en occultant ce qui précède. Ou bien :

grep wlan0 /proc/net/wireless | awk '{ print $3 }'

pour ne sélectionner que la colonne 3 dans la ligne contenant wlan0.

Il est aussi possible de faire une mise en forme pour ajouter les signes complémentaires Force du signal et 00 %. Pour être affichés en sortie, ces signes doivent être entourés de " " (attention de ne pas confondre " avec ' ou même ` )

grep wlan0 /proc/net/wireless |awk '{ print "Force du signal = " $3 "00 %" }'

Mais il est possible de simplifier encore. En effet, il n'est pas nécessaire de mélanger des grep et awk, puisque awk peut très bien se débrouiller tout seul. Par exemple pour n'afficher que la colonne 3 de la ligne contenant wlan0, on fera :

awk 'NR==3 {print $3 }' /proc/net/wireless

Si l'on veut ajouter une mise en forme pour ajouter les signes complémentaires Force du signal et 00 % :

awk '/wlan0/' /proc/net/wireless | awk '{print "Force du signal = " $3 "00 %" }'

La commande peut être encore simplifiée. En effet, comme on peut n'utiliser que awk et non awk avec grep, autant ne lancer qu'une seule procédure awk plutôt que deux awk avec un tube (ou pipe) | . La commande finale et simplifiée sera donc :

awk '/wlan0/ {print "Force du signal = " $3 "00 %"}' /proc/net/wireless

qui affichera : Force du signal = 56.00 %

si l'on ne connait pas wlan0 ou si l'on ne veut pas le spécifier mais seulement afficher la ligne 3 quelle que soit l'adresse de la carte :

awk 'NR==3 {print "Force du signal = " $3 "00 %"}' /proc/net/wireless

La sortie de awk dans une boite de dialogue : si l'on veut améliorer l'affichage du résultat dans une boite et que zenity est installé sur le système, la commande sera :

zenity --info --text=" `awk '/wlan0/ {print "Force du signal = " $3 "00 %"}' /proc/net/wireless` "

On peut aussi ne pas utiliser zenity mais xdialog :

Xdialog --msgbox `awk '/wlan0/ {print "signal=" $3 "00%"}' /proc/net/wireless` 10 30

ou avec dialog :

dialog --msgbox `awk '/wlan0/ {print "signal=" $3 "00%"}' /proc/net/wireless` 0 0

Un autre outil bien pratique pour afficher des boites est notify-send. Pour l'utiliser sur Debian, il faut avoir installé libnotify-bin. La commande sera donc :

notify-send "Force Du Signal wlan0 =" `awk '/wlan0/ {print $3"00%"}' /proc/net/wireless`

ou bien plus généralement :

notify-send "Force Du Signal =" `awk 'NR==3 {print $3"00%"}' /proc/net/wireless`

Pour utiliser simplement cette commande, il est possible de mettre un script dans le répertoire bin/ de son /home/ :

#!/bin/bash
#Force du signal wifi avec notify
notify-send "Force Du Signal wlan0 =" `gawk 'NR==3 {print $3"00%"}' /proc/net/wireless`

script que l'on appellera par exemple signal et, après l'avoir rendu exécutable, si le répertoire bin est dans le PATH de l'user, il pourra être lancé très simplement par la commande signal depuis n'importe quel répertoire où l'on se trouve. Pour vérifier si votre bash comprend le répertoire bin/ voir votre fichier .bash_profile qui doit contenir :
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

ou vérifier par la commande echo $PATH quel est votre path.

Une précision pour terminer : le fichier /proc/net/wireless est aussi consultable par la commande iwlist. Donc la commande :

iwlist wlan0 scan |grep Qual
va afficher le résultat : Quality=56/70 Signal level=-54 dBm

ou bien :

iwlist wlan0 scan |awk '/Qual/ {print $1}'
affichera : Quality=56/70

Comme on peut le voir, il est possible d'utiliser indifférement grep ou awk, mais les possibilités de awk sont bien plus nombreuses que ce que l'on vient de voir. Il permet par exemple de savoir à quelle date a été installé son système :
ls -lct /boot/ | tail -1 | awk '{print $7, $6, $8}'

ou bien de convertir de l'hexadécimal :
echo 0x12 |gawk --non-decimal-data '{printf " %d\n",$1}'

de convertir dans un répertoire les extensions txt en ps :
ls | awk -F"." ' /txt/ { print "mv " $1 "." $2 " " $1 ".ps" } ' | bash

Et bien d'autres choses encore. Pour plus de détails voir :

http://www.gnu.org/software/gawk/manual/gawk.html
http://www.shellunix.com/awk.html

cep

http://www.cepcasa.info/blog/
(Ce message a été modifié le : 09-21-2009 11:35 AM par cep.)
09-21-2009 11:17 AM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
poiuy Hors ligne
Admin
*******

Messages : 117
Inscription : Jul 2009
Message : #2
RE: Exemples d'utilisation de awk
Bonne initiative.
Une doc en français :
http://www.ai.univ-paris8.fr/~fb/Cours/MRD/Awk.ps

PS : tu devrais expliquer les commandes que tu écris : un débutant ne comprendra pas d'où sortent $1, print, printf, ou NR par exemple, alors qu'en évoquant les variables et les fonctions de ?awk, cela serait très simplement compréhensible...
09-21-2009 04:53 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
cep Hors ligne
Admin
*******

Messages : 142
Inscription : Jul 2009
Message : #3
RE: Exemples d'utilisation de awk
Certes, mais ce sont essentiellement des exemples et non un cours.
Et les explications peuvent venir après, pour ne pas surcharger encore plus le premier poste. C'est aussi pour cela que je l'ai placé sur ce forum et pas seulement sur un blog.
Et puis ça s'adresse à des débutants motivés, les autres sont partis dès la lecture du titre Smile

http://www.cepcasa.info/blog/
09-21-2009 06:24 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse 


Aller à :