man gawk
awk
vient de ses 3 auteurs Aho, Weinberger et Kernighan
.
Il peut être classé dans la catégorie des filtres. Mais c'est beaucoup plus qu'un utilitaire de gestion des fichiers textes, il intégre un langage interprété très voisin du C. gawk
=GNU awk; il s'agit d'une version plus performante.
sed
, s'applique à un fichier, ou à un flot de données provenant de son entrée, si le fichier (précédé de -f) est absent. Il lit ce fichier ligne par ligne (toutes les lignes par défaut). Les lignes sont séparées par des retour-chariots.
séparateur
.-F":"
, par exemple, ou invoqué dans le motif d'une expression rationnelle./etc/passwd
supposé bien connu.login:x:uid:gid:commentaire:home:shell
gawk -F":" 'bloc-programme' /etc/passwd
-F":"
signale que le caractère séparateur est ":" dans ce fichier. {}
s'appliquera à chaque ligne. Il contient souvent print
, l'instruction d'affichage sur la sortie standard, et des chaines constantes entourées de " ".print
, seul, affiche toute la ligne et insère un retour-chariot.gawk -F":" '{print "Ligne n° " NR "=" $0}' /etc/passwd
$0
), précédées de leur numéro (contenu dans NR
)gawk -F":" '{print}' /etc/passwd
gawk
suivant ":" en 7 champs, dont les valeurs individuelles sont affectées aux variables système $1, $2 ... jusqu'au dernier.gawk -F":" '{print "Le répertoire personnel de " $1 " est " $6}' /etc/passwd
toto:x:520:521:Monsieur Toto Jules:/home/toto:/bin/bash
, elle fera afficher :
gawk -F":" '{print "Le nombre de champs = " NF " et le dernier vaut " $NF }' /etc/passwd
NF
, ici 7, et la valeur du dernier champ peut alors être référencée par $NF
gawk -F":" '{print "Premier champ : "$1 " ; print "Et dernier : $NF }' /etc/passwd
print
fait passer à la ligne.
gawk -F":" '{ if ($3 >= 500 ) print "login " $1 " uid = " $3 " rép perso : " $6}' /etc/passwd
users.txt
==
, la différence avec !=
) ainsi que les opérateurs booléens : &&
(et), ||
(ou) , ! (non)
gawk -F":" '{ if ($3 >= 500 && substr( $1, 0, 1)== "j") print NR "login " $1 " uid = " $3 " rép perso : " $6}' /etc/passwd
$3>=500
) et commençant par la lettre "j". En effet, l'appel à la fonction prédéfinie substr( $1, 0, 1)
extrait une sous-chaine du nom ($1) à partir du 1er caractère (numéro 0) et sur une longueur 1, autrement dit l'initiale du nom.
gawk -F":" ' $1 ~/^[a-fj]/ { print NR $0 }' /etc/passwd
... La suite, prochainement ...