Présentation
Le awk
command est un outil Linux et un langage de programmation qui permet aux utilisateurs de traiter et de manipuler des données et de produire des rapports formatés. L'outil prend en charge diverses opérations de traitement de texte avancé et facilite l'expression de sélections de données complexes.
Dans ce didacticiel, vous apprendrez ce que le awk
commande et comment l'utiliser.

Prérequis
- Un système exécutant Linux.
- Accès à une fenêtre de terminal.
Syntaxe de la commande AWK
La syntaxe du awk
la commande est :
awk [options] 'selection_criteria {action}' input-file > output-file
Les options disponibles sont :
Option | Description |
---|---|
-F [separator] | Utilisé pour spécifier un séparateur de fichier. Le séparateur par défaut est un espace vide. |
-f [filename] | Utilisé pour spécifier le fichier contenant le awk scénario. Lit le awk source du programme à partir du fichier spécifié, au lieu du premier argument de ligne de commande. |
-v | Utilisé pour affecter une variable. |
Comment fonctionne la commande AWK ?
Le awk
le but principal de la commande est de faire de la récupération d'informations et de la manipulation de texte facile à réaliser sous Linux. La commande fonctionne en analysant un ensemble de lignes d'entrée dans l'ordre et recherche les lignes correspondant aux modèles spécifiés par l'utilisateur.
Pour chaque modèle, les utilisateurs peuvent spécifier une action à effectuer sur chaque ligne correspondant au modèle spécifié. Ainsi, en utilisant awk
, les utilisateurs peuvent facilement traiter des fichiers journaux complexes et produire un rapport lisible.
Opérations AWK
awk
permet aux utilisateurs d'effectuer diverses opérations sur un fichier ou un texte d'entrée. Certaines des opérations disponibles sont :
- Scanne un fichier ligne par ligne.
- Divisez la ligne/le fichier d'entrée en champs.
- Comparer la ligne ou les champs d'entrée avec le(s) modèle(s) spécifié(s).
- Effectuez diverses actions sur les lignes correspondantes.
- Mettre en forme les lignes de sortie.
- Effectuer des opérations arithmétiques et sur les chaînes
- Utiliser le flux de contrôle et les boucles sur la sortie.
- Transformer les fichiers et les données selon une structure spécifiée.
- Générer des rapports formatés.
Déclarations AWK
La commande fournit des instructions de flux de contrôle de base (if-else
, while
, for
, break
) et permet également aux utilisateurs de regrouper les instructions à l'aide d'accolades {}
.
- si-autre
Le if-else
L'instruction fonctionne en évaluant la condition spécifiée entre parenthèses et, si la condition est vraie, l'instruction suivant le if
l'instruction est exécutée. Le else
la partie est facultative.
Par exemple :
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt

La sortie affiche les lignes dans lesquelles des doublons existent et indique Pas de doublons s'il n'y a pas de réponses en double dans la ligne.
- pendant
Le while
instruction exécute de manière répétée une instruction cible tant que la condition spécifiée est vraie. Cela signifie qu'il fonctionne comme celui du langage de programmation C. Si la condition est vraie, le corps de la boucle est exécuté. Si la condition est fausse, awk
continue l'exécution.
Par exemple, l'instruction suivante indique awk
pour imprimer tous les champs de saisie un par ligne :
awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt

- pour
Le for
L'instruction fonctionne également comme celle de C, permettant aux utilisateurs de créer une boucle qui doit s'exécuter un nombre spécifique de fois.
Par exemple :
awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'

La déclaration ci-dessus augmente la valeur de i
par un jusqu'à ce qu'il atteigne dix et calcule le carré de i
à chaque fois.
- pause
La break
l'instruction sort immédiatement d'un while
englobant ou for
. Pour commencer la prochaine itération, utilisez le continue
déclaration.
Le next
instruction indique awk
pour passer à l'enregistrement suivant et commencer à rechercher des modèles à partir du haut. La exit
instruction indique awk
que la saisie est terminée.
Voici un exemple de break
déclaration :
awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'

La commande ci-dessus rompt la boucle après 5 itérations.
Modèles AWK
Insertion d'un motif devant une action dans awk
agit comme un sélecteur . Le sélecteur détermine s'il faut effectuer une action ou non. Les expressions suivantes peuvent servir de modèles :
- Expressions régulières.
- Expressions relationnelles arithmétiques.
- Expressions à valeur de chaîne.
- Combinaisons booléennes arbitraires des expressions ci-dessus.
Les sections suivantes expliquent les expressions mentionnées ci-dessus et comment les utiliser.
Modèles d'expressions régulières
Les modèles d'expressions régulières sont la forme la plus simple d'expressions contenant une chaîne de caractères entourée de barres obliques. Il peut s'agir d'une séquence de lettres, de chiffres ou d'une combinaison des deux.
Dans l'exemple suivant, le programme sort toutes les lignes commençant par "A". Si la chaîne spécifiée fait partie d'un mot plus long, elle est également imprimée.
awk '$1 ~ /^A/ {print $0}' employees.txt

Modèles d'expression relationnelle
Un autre type de awk
les motifs sont des motifs d'expression relationnels. Les modèles d'expression relationnelle impliquent l'utilisation de l'un des opérateurs relationnels suivants :<, <=, ==, !=,>= , et > .
Voici un exemple de awk
expression relationnelle :
awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'

Modèles de plage
Un modèle de plage est un modèle composé de deux modèles séparés par une virgule. Les modèles de plage effectuent l'action spécifiée pour chaque ligne entre l'occurrence du modèle un et le modèle deux.
Par exemple :
awk '/clerk/, /manager/ {print $1, $2}' employees.txt

Le modèle ci-dessus indique awk
pour imprimer toutes les lignes de l'entrée contenant les mots clés "clerk" et "manager".
Motifs d'expression spéciaux
Les modèles d'expression spéciaux incluent BEGIN
et END
qui indiquent l'initialisation et la fin du programme. Le BEGIN
pattern correspond au début de l'entrée, avant que le premier enregistrement ne soit traité. Le END
modèle correspond à la fin de l'entrée, après le traitement du dernier enregistrement.
Par exemple, vous pouvez demander à awk
pour afficher un message au début et à la fin du processus :
awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt

Combiner des motifs
Le awk
La commande permet aux utilisateurs de combiner deux modèles ou plus à l'aide d'opérateurs logiques. Les motifs combinés peuvent être n'importe quelle combinaison booléenne de motifs. Les opérateurs logiques pour combiner des motifs sont :
||
(ou)&&
(et)!
(pas)
Par exemple :
awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt

La sortie imprime les premier et deuxième champs des enregistrements dont le troisième champ est supérieur à dix et le quatrième champ est inférieur à 20.
Variables AWK
Le awk
La commande a des variables de champ intégrées, qui divisent le fichier d'entrée en parties distinctes appelées champs . Le awk
attribue les variables suivantes à chaque champ de données :
$0
. Utilisé pour spécifier toute la ligne.$1
. Spécifie le premier champ.$2
. Spécifie le deuxième champ.- etc.
Autres awk
intégrés disponibles variables sont :
NR
. Compte le nombre d'enregistrements d'entrée (généralement des lignes). Leawk
La commande exécute les instructions modèle/action une fois pour chaque enregistrement d'un fichier.
Par exemple :
awk '{print NR,$0}' employees.txt

La commande affiche le numéro de ligne dans la sortie.
NF
. Compte le nombre de champs dans l'enregistrement d'entrée actuel et affiche le dernier champ du fichier.
Par exemple :
awk '{print $NF}' employees.txt

FS
. Contient le caractère utilisé pour diviser les champs sur la ligne d'entrée. Le séparateur par défaut est l'espace, mais vous pouvez utiliserFS
pour réaffecter le séparateur à un autre caractère (généralement dansBEGIN
).
Par exemple, vous pouvez faire en sorte que etc/passwd fichier (liste d'utilisateurs) plus lisible en remplaçant le séparateur par deux-points (:
) à un tiret (/
) et imprimez également le séparateur de champs :
awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd

RS
. Stocke le caractère séparateur d'enregistrement actuel. La ligne d'entrée par défaut est l'enregistrement d'entrée, ce qui fait d'une nouvelle ligne le séparateur d'enregistrement par défaut. La commande est utile si l'entrée est un fichier séparé par des virgules (CSV).
Par exemple :
awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt

OFS
. Stocke le séparateur de champ de sortie, qui sépare les champs lors de l'impression. Le séparateur par défaut est un espace vide. Chaque fois que le fichier imprimé comporte plusieurs paramètres séparés par des virgules, l'OFS
la valeur est imprimée entre chaque paramètre.
Par exemple :
awk 'OFS=" works as " {print $1,$3}' employees.txt

Actions AWK
Le awk
l'outil suit des règles contenant des paires modèle-action. Les actions consistent en des instructions entre accolades {}
qui contiennent des expressions, des instructions de contrôle, des instructions composées, des instructions d'entrée et de sortie et des instructions de suppression. Ces déclarations sont décrites dans les sections ci-dessus.
Créer un awk
script en utilisant la syntaxe suivante :
awk '{action}'
Par exemple :
awk '{print "How to use the awk command"}'

Cette simple commande indique awk
pour imprimer la chaîne spécifiée chaque fois que vous exécutez la commande. Terminez le programme en utilisant Ctrl+D .
Comment utiliser la commande AWK - Exemples
Outre la manipulation de données et la production de sorties formatées, awk
a d'autres utilisations car il s'agit d'un langage de script et pas seulement d'une commande de traitement de texte. Cette section explique les cas d'utilisation alternatifs pour awk
.
- Calculs . Le
awk
La commande vous permet d'effectuer des calculs arithmétiques. Par exemple :
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'

Dans cet exemple, nous dirigeons vers la commande df et utilisons les informations générées dans le rapport pour calculer la mémoire totale disponible et utilisée par les systèmes de fichiers montés qui contiennent uniquement /dev et /boucle dans le nom.
Le rapport produit montre la somme mémoire de /dev et /boucle systèmes de fichiers dans les colonnes deux et trois dans le df
sortie.
- Filtrage . Le
awk
La commande vous permet de filtrer la sortie en limitant la longueur des lignes. Par exemple :
awk 'length($0) > 8' /etc/shells

Dans cet exemple, nous avons exécuté le fichier /etc/shells fichier système via awk
et filtré la sortie pour ne contenir que les lignes contenant plus de 8 caractères.
- Surveillance . Vérifiez si un certain processus est en cours d'exécution sous Linux en vous connectant au
ps
commande. Par exemple :
ps -ef | awk '{ if($NF == "clipboard") print $0}'

La sortie imprime une liste de tous les processus en cours d'exécution sur votre machine avec le dernier champ correspondant au modèle spécifié.
- Compter . Vous pouvez utiliser
awk
pour compter le nombre de caractères dans une ligne et obtenir le nombre imprimé dans le résultat. Par exemple :
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt
