Comment utiliser awk sur Linux

Comment utiliser awk sur Linux

Les services publics offrent que Linux suivent souvent la philosophie UNIX du design. 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 avons certaines des plus belles fonctionnalités de traitement de texte à l'aide d'outils comme SED et AWK.

Dans Linux, l'outil awk est préinstallé sur toutes les distros Linux. Awk lui-même est un langage de programmation. L'outil awk est juste un interprète du langage de programmation awk. Dans ce guide, consultez comment utiliser awk sur Linux.

Utilisation de awk

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

Le comportement par défaut de AWK est d'utiliser des espaces blancs (espaces, onglets, etc.) pour la séparation des champs. Heureusement, de nombreux fichiers de configuration sur Linux suivent ce modèle.

Syntaxe de base

C'est à quoi ressemble la structure de commande de la commande.

$ awk '// ; ; '

Les parties de la commande sont assez explicites. Awk peut fonctionner sans la partie de recherche ou d'action. Si rien n'est spécifié, alors l'action par défaut sur le match ne sera que l'impression. Fondamentalement, AWK imprimera tous les matchs trouvés 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 motif pour déterminer si la ligne actuelle le reflète. S'il est assorti, alors AWK effectue l'action spécifiée.

Notez que AWK peut également fonctionner sur des textes redirigés. Cela peut être réalisé en tuant le contenu de la commande 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 principales caractéristiques qui font de AWK un outil puissant est le support de l'expression régulière (regex, pour faire court). Une expression régulière est une chaîne qui représente un certain modèle de caractères.

Voici une liste de certaines des syntaxes d'expression régulière les plus courantes. Ces syntaxes regex ne sont pas seulement uniques à awk. Ce sont des syntaxes regex presque universelles, donc les maîtriser aideront également dans d'autres applications / programmes qui impliquent une expression régulière.

  • Personnages de base: Tous les caractères alphanumériques soulignent (_) etc.
    • Ensemble de caractères: Pour faciliter les choses, il y a des groupes de caractères dans le regex. Par exemple, majuscules (A-Z), minuscules (A-Z) et chiffres numériques (0-9).
  • Méta-charcutiers: Ce sont des personnages qui expliquent diverses façons d'étendre les personnages ordinaires.
    • Période (.): Toute correspondance de personnage dans la position est valide (sauf une nouvelle ligne).
    • Astérisque (*): Zéro ou plus d'existences du caractère immédiat qui le précède est valide.
    • Support ([]): Le match est valide si, en position, l'un des caractères du support est égalé. Il peut être combiné avec des jeux de caractères.
    • Caret (^): Le match devra être au début de la ligne.
    • Dollar ($): Le match devra être à la fin de la ligne.
    • Bombardement (\): Si une méta-personnage doit être utilisée au sens littéral.

Impression du texte

Pour imprimer tout le contenu d'un fichier texte, utilisez la commande d'impression. Dans le cas du modèle de recherche, il n'y a pas de modèle défini. Alors, 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 cordes

Awk peut effectuer une recherche de texte de base sur le texte donné. Dans la section des modèles, ce doit être le texte pour trouver.

Dans la commande suivante, AWK recherchera le texte «rapide» sur toutes les lignes de l'échantillon de fichier.SMS.

$ awk '/ Quick /' échantillon.SMS

Maintenant, utilisons des expressions régulières pour affiner davantage la recherche. La commande suivante imprimera toutes les lignes qui ont «brune» au début.

$ awk '/ ^ brun /' é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 présenter l'utilisation du caret (.). Ici, il peut y avoir deux personnages avant le personnage «E».

$ awk '/… e /' échantillon.SMS

Modèle de joker (en utilisant l'astérisque)

Et s'il peut y avoir n'importe quel nombre de caractères sur place? Pour correspondre à n'importe quel caractère possible en position, utilisez l'astérisque (*). Ici, AWK correspondra à toutes les lignes qui ont n'importe quelle quantité de caractères après "le".

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

Expression du support

L'exemple suivant va montrer comment utiliser l'expression du support. L'expression du support indique qu'à l'emplacement, le match sera valide s'il correspond à l'ensemble des caractères entourés des supports. Par exemple, la commande suivante correspondra à «le» et «tee» comme des correspondances valides.

$ awk '/ t [il] e /' échantillon.SMS

Il y a quelques jeux de caractères prédéfinis dans l'expression régulière. Par exemple, l'ensemble de toutes les lettres majuscules est étiquetée comme «A-Z». Dans la commande suivante, AWK correspondra à tous les mots qui contiennent une lettre majuscule.

$ awk '/ [a-z] /' échantillon.SMS

Jetez un œil à l'utilisation suivante des ensembles de caractères avec expression du support.

  • [0-9]: indique un seul chiffre
  • [A-Z]: indique une seule lettre minuscule
  • [A-Z]: indique une seule lettre en majuscules
  • [a-za-z]: indique une seule lettre
  • [A-ZA-Z 0-9]: indique un seul caractère ou chiffre.

Variables prédéfinies awk

Awk est livré avec un tas de variables prédéfinies et automatiques. Ces variables peuvent faciliter les programmes d'écriture et les 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'enregistrement. En raison de la nature de awk, il traite les données d'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 Newline.
  • NR: Le numéro d'enregistrement de saisie 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é comme séparateur de champ. Une fois lue, AWK divisait un enregistrement dans différents champs. Le délimiteur est défini par la valeur de FS. Lors de l'impression, awk rejoint tous les champs. Cependant, pour le moment, AWK utilise le séparateur OFS au lieu du séparateur FS. Généralement, FS et OFS sont identiques mais pas obligatoires pour l'être.
  • NF: Le nombre de champs dans l'enregistrement actuel. Si la valeur par défaut «Whitespace» est utilisée, elle correspondra au nombre de mots dans l'enregistrement actuel.
  • ORS: Le séparateur d'enregistrement pour les données de sortie. La valeur par défaut est le caractère Newline.

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

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

Pour attribuer 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 rien. C'est une astuce qui utilise une règle POSIX obscure. 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 se compose d'une nouvelle ligne avec une ou plusieurs lignes vierges. Dans POSIX, une ligne vierge sans contenu est complètement vide. Cependant, si la ligne contient des espaces blancs, il n'est pas considéré comme «vide».

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

Ressources additionnelles

Awk est un outil puissant avec des tonnes de fonctionnalités. Bien que ce guide en couvre beaucoup, ce ne sont toujours que les bases. Masterring awk prendra plus que ça. Ce guide devrait être une belle introduction à l'outil.

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

  • Couper un espace
  • En utilisant une déclaration conditionnelle
  • Imprimer une gamme de colonnes
  • Regex avec awk
  • 20 exemples awk

Internet est un bon endroit pour apprendre quelque chose. Il existe de nombreux tutoriels impressionnants sur les bases 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 AWK. Bien que cela puisse prendre un certain temps, la maîtrise AWK est extrêmement gratifiante en termes de puissance qu'il accorde.

Happy Computing!