Awk

Comment utiliser AWK sous Linux

Comment utiliser AWK sous Linux

Les utilitaires proposés par Linux suivent souvent la philosophie de conception UNIX. Tout outil doit être petit, utiliser du texte brut pour les E/S et fonctionner de manière modulaire. Grâce à l'héritage, nous disposons de certaines des meilleures fonctionnalités de traitement de texte à l'aide d'outils tels que sed et awk.

Sous Linux, l'outil awk est pré-installé sur toutes les distributions Linux. AWK lui-même est un langage de programmation. L'outil AWK n'est qu'un interpréteur du langage de programmation AWK. Dans ce guide, découvrez comment utiliser AWK sous Linux.

Utilisation d'AWK

L'outil AWK est plus utile lorsque les textes sont organisés dans un format prévisible. C'est assez bon pour analyser et manipuler des données tabulaires. Il fonctionne ligne par ligne, sur l'ensemble du fichier texte.

Le comportement par défaut de awk est d'utiliser des espaces (espaces, tabulations, etc.) pour séparer les champs. Heureusement, de nombreux fichiers de configuration sous Linux suivent ce modèle.

Syntaxe de base

Voici à quoi ressemble la structure de commande de awk.

$ awk '// ; ; '

Les parties de la commande sont assez explicites. Awk peut fonctionner sans la partie recherche ou action. Si rien n'est spécifié, alors l'action par défaut sur le match sera juste l'impression. Fondamentalement, awk imprimera toutes les correspondances trouvées sur le fichier.

S'il n'y a pas de modèle de recherche spécifié, alors awk effectuera les actions spécifiées sur chaque ligne du fichier.

Si les deux parties sont données, alors awk utilisera le modèle pour déterminer si la ligne actuelle le reflète. S'il correspond, awk exécute l'action spécifiée.

Notez que awk peut également fonctionner sur des textes redirigés. Ceci peut être réalisé en redirigeant le contenu de la commande vers awk pour agir sur. En savoir plus sur la commande Linux pipe.

À des fins de démonstration, voici un exemple de fichier texte. Il contient 10 lignes, 2 mots par ligne.

$ échantillon de chat.SMS

Expression régulière

L'une des fonctionnalités clés qui font d'awk un outil puissant est la prise en charge des expressions régulières (regex, en abrégé). Une expression régulière est une chaîne qui représente un certain modèle de caractères.

Voici une liste de quelques-unes des syntaxes d'expressions régulières les plus courantes. Ces syntaxes regex ne sont pas seulement uniques à awk. Ce sont des syntaxes regex presque universelles, donc les maîtriser aidera également dans d'autres applications/programmations qui impliquent des expressions régulières.

  • Caractères de base: Tous les caractères alphanumériques soulignés (_) etc.
    • Jeu de caractères : pour faciliter les choses, il existe des groupes de caractères dans l'expression régulière. Par exemple, majuscules (A-Z), minuscules (a-z) et chiffres (0-9).
  • Méta-caractères: Ce sont des caractères qui expliquent différentes manières d'étendre les caractères ordinaires.
    • Période (.): Toute correspondance de caractère dans la position est valide (sauf une nouvelle ligne).
    • Astérisque (*): zéro ou plusieurs existences du caractère immédiat qui le précède est valide.
    • Support ([]): La correspondance est valide si, à la position, l'un des caractères de la parenthèse est trouvé. Il peut être combiné avec des jeux de caractères.
    • Caret (^): Le match devra être au départ de la ligne.
    • Dollars ($): Le match devra être au bout du fil.
    • Barre oblique inverse (\): Si un méta-caractère doit être utilisé au sens littéral.

Impression du texte

Pour imprimer tout le contenu d'un fichier texte, utilisez la commande print. Dans le cas du modèle de recherche, il n'y a pas de modèle défini. Donc, awk imprime toutes les lignes.

$ awk 'print' échantillon.SMS

Ici, "print" est une commande AWK qui imprime le contenu de l'entrée.

Recherche de chaîne

AWK peut effectuer une recherche de texte de base sur le texte donné. Dans la section motif, ce doit être le texte à trouver.

Dans la commande suivante, awk recherchera le texte "rapide" sur toutes les lignes du fichier sample.SMS.

$ awk '/quick/' échantillon.SMS

Maintenant, utilisons quelques expressions régulières pour affiner davantage la recherche. La commande suivante imprimera toutes les lignes qui ont "marron" au début.

$ awk '/^brown/' échantillon.SMS

Que diriez-vous de trouver quelque chose à la fin d'une ligne? La commande suivante imprimera toutes les lignes qui ont "rapide" à la fin.

$ awk '/quick$/' échantillon.SMS

Modèle de joker

L'exemple suivant va montrer l'utilisation du caret (.). Ici, il peut y avoir deux caractères avant le caractère "e".

$ awk '/… e/' exemple.SMS

Modèle de caractère générique (utilisant l'astérisque)

Que faire s'il peut y avoir n'importe quel nombre de caractères à l'emplacement? Pour faire correspondre n'importe quel caractère possible à la position, utilisez l'astérisque (*). Ici, AWK correspondra à toutes les lignes contenant un nombre quelconque de caractères après « le ».

$ awk '/le*/' échantillon.SMS

Expression entre parenthèses

L'exemple suivant va montrer comment utiliser l'expression crochet. L'expression entre crochets indique qu'à l'emplacement, la correspondance sera valide si elle correspond à l'ensemble de caractères entre crochets. Par exemple, la commande suivante correspondra à « The » et « Tee » comme des correspondances valides.

$ awk '/T[he]e/' sample.SMS

Il y a des jeux de caractères prédéfinis dans l'expression régulière. Par exemple, l'ensemble de toutes les lettres majuscules est étiqueté « A-Z ». Dans la commande suivante, awk fera correspondre tous les mots contenant une lettre majuscule.

$ awk '/[A-Z]/' échantillon.SMS

Jetez un œil à l'utilisation suivante des jeux de caractères avec une expression entre crochets.

  • [0-9] : Indique un seul chiffre
  • [a-z] : indique une seule lettre minuscule
  • [A-Z] : indique une seule lettre majuscule
  • [a-zA-z] : indique une seule lettre
  • [a-zA-z 0-9] : indique un seul caractère ou chiffre.

Awk variables prédéfinies

AWK est livré avec un tas de variables prédéfinies et automatiques. Ces variables peuvent faciliter l'écriture de programmes et de scripts avec AWK.

Voici quelques-unes des variables AWK les plus courantes que vous rencontrerez.

  • NOM DE FICHIER: Le nom de fichier du fichier d'entrée actuel.
  • RS: Le séparateur d'enregistrements. En raison de la nature d'AWK, il traite les données un enregistrement à la fois. Ici, cette variable spécifie le délimiteur utilisé pour diviser le flux de données en enregistrements. Par défaut, cette valeur est le caractère de nouvelle ligne.
  • NR: Le numéro d'enregistrement d'entrée actuel. Si la valeur RS est définie par défaut, cette valeur indiquera le numéro de ligne d'entrée actuel.
  • FS/OFS: Le(s) caractère(s) utilisé(s) comme séparateur de champ. Une fois lu, AWK divise un enregistrement en différents champs. Le délimiteur est défini par la valeur de FS. Lors de l'impression, AWK rejoint tous les champs. Cependant, à l'heure actuelle, AWK utilise le séparateur OFS au lieu du séparateur FS. Généralement, FS et OFS sont les mêmes mais pas obligatoires pour être ainsi.
  • NF: Le nombre de champs dans l'enregistrement actuel. Si la valeur par défaut « espace blanc » est utilisée, elle correspondra au nombre de mots dans l'enregistrement actuel.
  • SRO: Le séparateur d'enregistrement pour les données de sortie. La valeur par défaut est le caractère de nouvelle ligne.

Vérifions-les en action. La commande suivante utilisera la variable NR pour imprimer la ligne 2 à la ligne 4 de l'échantillon.SMS. AWK prend également en charge les opérateurs logiques comme logical et (&&).

$ awk 'NR > 1 && NR < 5' sample.txt

Pour affecter une valeur spécifique à une variable AWK, utilisez la structure suivante.

$ awk '// ; ; ' =,

Par exemple, pour supprimer toutes les lignes vides du fichier d'entrée, modifiez la valeur de RS en pratiquement rien. C'est une astuce qui utilise une obscure règle POSIX. Il spécifie que si la valeur de RS est une chaîne vide, alors les enregistrements sont séparés par une séquence qui consiste en une nouvelle ligne avec une ou plusieurs lignes vides. Dans POSIX, une ligne vide sans contenu est complètement vide. Cependant, si la ligne contient des espaces, elle n'est pas considérée comme « vide ».

$ awk 'print' RS=" échantillon.SMS

Ressources supplémentaires

AWK est un outil puissant avec des tonnes de fonctionnalités. Bien que ce guide en couvre beaucoup, il ne s'agit toujours que des bases. Maîtriser AWK demandera plus que cela. Ce guide devrait être une belle introduction à l'outil.

Si vous voulez vraiment maîtriser l'outil, voici quelques ressources supplémentaires que vous devriez consulter.

  • Couper les espaces
  • Utilisation d'une instruction conditionnelle
  • Imprimer une plage de colonnes
  • Regex avec AWK
  • 20 exemples d'AWK

Internet est un bon endroit pour apprendre quelque chose. Il existe de nombreux tutoriels géniaux sur les bases d'AWK pour les utilisateurs très avancés.

Pensée finale

Espérons que ce guide a aidé à fournir une bonne compréhension des bases d'AWK. Bien que cela puisse prendre un certain temps, maîtriser AWK est extrêmement gratifiant en termes de puissance qu'il confère.

Bon calcul!

Tutoriel Shadow of the Tomb Raider pour Linux
Shadow of the Tomb Raider est le douzième ajout à la série Tomb Raider - une franchise de jeux d'action-aventure créée par Eidos Montréal. Le jeu a ét...
Comment booster les FPS sous Linux?
FPS signifie Images par seconde. La tâche du FPS est de mesurer la fréquence d'images dans les lectures vidéo ou les performances de jeu. En termes si...
Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...