Avec AWK, il est facile de rechercher une valeur dans un texte, pour remplacer un champ ou juste connaître le contenu.

Pour notre premier exemple, on va rechercher le nombre de Badcalls dans les statistiques NFS d'un serveur.

La commande de base est 'nfsstat -cn'  qui donne le résultat suivant :

nfsstat -cn

Client nfs:

calls      badcalls   clgets     cltoomany

7          0          0          0

Version 2: (0 calls)

null       getattr    setattr    root       lookup     readlink   read

0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%

wrcache    write      create     remove     rename     link       symlink

0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%

mkdir      rmdir      readdir    statfs

0 0%       0 0%       0 0%       0 0%

Version 3: (0 calls)

null       getattr    setattr    lookup     access     readlink   read

0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%

write      create     mkdir      symlink    mknod      remove     rmdir

0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%

rename     link       readdir    readdir+   fsstat     fsinfo     pathconf

0 0%       0 0%       0 0%       0 0%       0 0%       0 0%       0 0%

commit

0 0%

 

On constate que le nombre de 'badcalls' est donné dans la ligne du dessous.

Avec Awk, il suffit de demander de trouver la ligne comportant badcalls et de lire la seconde valeur de la ligne suivante :

Cela se traduit de la façon suivante :

nfsstat -cn | awk 'BEGIN {}
/badcalls/ { getline;printf($2"\n") };
END {} '

Le '/badcalls/' demande au programme de traiter le cas où la ligne comporte la chaine 'badcalls'.

La chaine située sur la même ligne indique de :

 - Lire la ligne suivante 

 - d'afficher le second champ( le séparateur étant par défaut l'espace(' ')

Si on ne trouve pas, on ne fait aucune action.

Le cas suivant permettra de remplacer une valeur dans un fichier.

Le mot clé 'next' peut remplacer la commande 'getline' pour indiquer de passer à la ligne suivante, sans rien faire.

 

 

 

 

icon phone
Téléphone/Whatsapp : +33 (0)6 83 84 85 74
icon phone