Commande Awk
Cette commande agit comme un filtre programmable, prenant une série de lignes en entrée (par fichier, ou via l’entrée standard) et écrivant sur la sortie standard (redirigeable). Awk prend en entrée les lignes une par une et choisit les lignes à traiter (ou non) par des expressions rationnelles ou des numéros de lignes. Une fois la ligne sélectionnée, elle est découpée en champs, selon un séparateur d’entrée indiqué dans le programme awk par le symbole FS (par défaut espace et tabulation). Puis les différents champs sont disponibles dans les variables ($1, $2, $3, $NF pour le dernier). Vous pourrez aussi trouver des fichiers .awk qui sont des scripts écrits dans ce langage.awk [-F] '{action-awk}' [ fichier1 fichier2 ..... fichiern ]
La commande prend en paramètre la liste des fichiers à traiter, si des fichiers ne sont pas spécifiés, awk travaillera sur l’entrée standard. On peut donc placé la commande derrière un tube de communication. L’option “-F” permet d'initialiser si besoin la variable “FS” (Field Separator).
Voici une liste des variables prédéfinies au lancement de awk:
Variables | Valeur par défaut | Rôle |
RS | Newline (\n) |
Record Separator : Caractère séparateur d’enregistrement (lignes) |
FS | Suite d’espaces et ou de tabulation | Field Separator : caractères séparateurs de champs. |
OFS | Espace |
Output Field Separator: Séparateur de champ pour l’affichage |
ORS | Newline (\b) |
Output Record Separator : Séparateur de ligne pour la sortie |
ARGV | - |
Tableau initialisé avec les arguments de la ligne de commande (awk inclus) |
ARGC | - | Nombre d’arguments dans le tableau ARGV |
ENVIRON | Variables d’environnement exportées par le shell | Tableau contenant les variables d’environnement exportées par le shell. |
CONVFMT | %.6g | Format de conversion des nombres en string |
OFTM | %.6g | Format de sortie des nombres. |
SUBSEP | \0.34 |
Caractère de séparation pour les routines internes de tableaux. |
Attention : Lorsque que la variable FS a plus de 2 caractères, elle sera interprété comme une expression régulière
Voici les variables qui sont initialisées lors du traitement d’une ligne
Variable | Rôle |
$0 | Valeur de l’enregistrement courant |
NF | $1 contient la valeur du 1er champ, $2 du 2ème, ... et $NF le dernier |
$1,$2, .. $NF |
$1 contient la valeur du 1er champ, $2 du 2ème, ... et $NF le dernier |
NR |
Number : indice de l’enregistrement courant (NR vaut 1 quand la 1ère ligne est en cours de traitement) |
FNR |
File Number : indice de l’enregistrement courant relatif au fichier en cours de traitement |
FILENAME |
Nom du fichier en cours de traitement |
RLENGTH |
Longueur en string trouvé par la fonction match() |
RSTART |
Première position du string trouvé par la fonction match |
Exemple d’utilisation :ps -ef| awk ‘{print $1,$8}’
avec ps -ef on a la liste des processus, en cours d’exécution (voici un extrait):
et avec la commande:
La partie en gras représente entre quote permet d’éviter l’interprétation par le shell et indique à awk quelle fonction exécuter sur le traitement du awk. Les instructions doivent être placées entre accolades. La fonction intégrée print va afficher à l’écran les champs 1 et 8 de chaque ligne.
Voici un autre exemple :ps -ef | awk ‘{print “User : “, $1, “\tCommande : “, $8}’
Critères de sélection :
Il est possible de sélectionner les enregistrements sur lesquels l’action doit être exécutée : awk [-F] 'critère {action-awk}' [fichier1 fichier2 ... fichiern]
Le critère de sélection peut s’exprimer de différentes manières.
Expression régulières :awk -F’:’ ‘/\/bin\/false/ {print $0}’ /etc/passwd
Par défaut, c’est le champ correspondant au $0 qui est mis en correspondance avec
l’expression régulière., mais il est possible de le spécifier avec l’opérateur de concordance
“~” ou de non concordance “!~”.
awk -F ':' '$6 ~ /^\/usr/ {print $0}' /etc/passwd
Test logiques :
Le critère peut être une expression d’opérateurs renvoyant vrai ou faux.
Par exemple, pour afficher uniquement les lignes impaires du fichier /etc/passwdawk -F':' 'NR%2 {print $0}' /etc/passwd