GNU/Linux >> Tutoriels Linux >  >> Linux

Commande AWK sous Linux avec des exemples

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). Le awk 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 utiliser FS pour réaffecter le séparateur à un autre caractère (généralement dans BEGIN ).

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

Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri Linux avec exemples

  3. Commande Linux Tee avec exemples

  4. Commande principale Linux avec exemples

  5. Commande JQ sous Linux avec exemples

Commande Linux watch avec exemples

Commande Wait sous Linux avec des exemples

Commande d'exportation Linux avec exemples

Commande de redémarrage sous Linux avec des exemples

Commande Linux awk avec 10 exemples

Commande IP Linux avec exemples