GNU/Linux >> Tutoriels Linux >  >> Linux

Premiers pas avec awk, un puissant outil d'analyse de texte

Awk est un puissant outil d'analyse de texte pour les systèmes Unix et de type Unix, mais comme il a des fonctions programmées que vous pouvez utiliser pour effectuer des tâches d'analyse courantes, il est également considéré comme un langage de programmation . Vous ne développerez probablement pas votre prochaine application graphique avec awk, et il ne remplacera probablement pas votre langage de script par défaut, mais c'est un utilitaire puissant pour des tâches spécifiques.

Ce que ces tâches peuvent être est étonnamment diversifié. La meilleure façon de découvrir lequel de vos problèmes pourrait être le mieux résolu par awk est d'apprendre awk; vous serez surpris de voir à quel point awk peut vous aider à en faire plus, mais avec beaucoup moins d'efforts.

La syntaxe de base d'Awk est :

awk [options] 'pattern {action}' file 

Pour commencer, créez cet exemple de fichier et enregistrez-le sous colours.txt

nom       couleur  quantité
pomme      rouge    4
banane    jaune 6
rouge fraise    3
raisin      violet 10
pomme      vert  8
prune       violet 2
kiwi       marron  4
pomme de terre     marron  9
ananas  jaune 5

Ces données sont séparées en colonnes par un ou plusieurs espaces. Il est courant que les données que vous analysez soient organisées d'une certaine manière. Il ne s'agit pas toujours de colonnes séparées par des espaces, ou même d'une virgule ou d'un point-virgule, mais en particulier dans les fichiers journaux ou les vidages de données, il existe généralement un modèle prévisible. Vous pouvez utiliser des modèles de données pour aider awk à extraire et traiter les données sur lesquelles vous souhaitez vous concentrer.

Imprimer une colonne

En awk, l'imprimé fonction affiche tout ce que vous spécifiez. Il existe de nombreuses variables prédéfinies que vous pouvez utiliser, mais certaines des plus courantes sont des nombres entiers désignant des colonnes dans un fichier texte. Essayez-le :

$ awk '{print $2;}' colors.txt
couleur
rouge
jaune
rouge
violet
vert
violet
marron
marron
jaune

Dans ce cas, awk affiche la deuxième colonne, désignée par $2 . C'est relativement intuitif, donc vous pouvez probablement deviner que print $1 affiche la première colonne et imprime 3 $ affiche le troisième, et ainsi de suite.

Pour afficher tous colonnes, utilisez $0 .

Le nombre après le signe dollar ($ ) est une expression , donc 2 $ et $(1+1) veut dire la même chose.

Sélection conditionnelle de colonnes

Le fichier d'exemple que vous utilisez est très structuré. Il a une ligne qui sert d'en-tête et les colonnes sont directement liées les unes aux autres. En définissant conditionnel exigences, vous pouvez qualifier ce que vous voulez que awk renvoie lorsque vous examinez ces données. Par exemple, pour afficher les éléments de la colonne 2 qui correspondent à "jaune" et imprimer le contenu de la colonne 1 :

awk '$2=="yellow"{print $1}' colors.txt
banane
ananas

Les expressions régulières fonctionnent également. Cette condition porte sur $2 pour les correspondances approximatives avec la lettre p suivi d'un nombre quelconque de (un ou plusieurs) caractères, qui sont à leur tour suivis de la lettre p :

$ awk '$2 ~ /p.+p/ {print $0}' colors.txt
raisin   violet  10
prune    violet  2

Les nombres sont interprétés naturellement par awk. Par exemple, pour imprimer n'importe quelle ligne avec une troisième colonne contenant un entier supérieur à 5 :

awk '$3>5 {print $1, $2}' colors.txt
nom    couleur
banane  jaune
raisin  violet
pomme  vert
pomme de terre  marron

Séparateur de champ

Par défaut, awk utilise des espaces blancs comme séparateur de champs. Cependant, tous les fichiers texte n'utilisent pas d'espaces blancs pour définir les champs. Par exemple, créez un fichier appelé couleurs.csv avec ce contenu :

nom,couleur,quantité
pomme,rouge,4
banane,jaune,6
fraise,rouge,3
raisin,violet,10
pomme, vert,8
prune,violet,2
kiwi,marron,4
pomme de terre,marron,9
ananas,jaune,5

Awk peut traiter les données exactement de la même manière, tant que vous spécifiez le caractère qu'il doit utiliser comme séparateur de champs dans votre commande. Utilisez le --field-separator (ou juste -F pour faire court) option pour définir le délimiteur :

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
banane
ananas

Enregistrement de la sortie

En utilisant la redirection de sortie, vous pouvez écrire vos résultats dans un fichier. Par exemple :

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt 

Cela crée un fichier avec le contenu de votre requête awk.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Vous pouvez également diviser un fichier en plusieurs fichiers regroupés par données de colonne. Par exemple, si vous souhaitez diviser colours.txt en plusieurs fichiers en fonction de la couleur qui apparaît dans chaque ligne, vous pouvez demander à awk de rediriger par requête en incluant la redirection dans votre instruction awk :

$ awk '{print > $2".txt"}' colours.txt 

Cela produit des fichiers nommés yellow.txt , red.txt , et ainsi de suite.

Dans le prochain article, vous en apprendrez plus sur les champs, les enregistrements et certaines variables awk puissantes.


Cet article est adapté d'un épisode de Hacker Public Radio, un podcast technologique communautaire.


Linux
  1. Premiers pas avec Zsh

  2. Démarrer avec ls

  3. Premiers pas avec Samba pour l'interopérabilité

  4. Premiers pas avec socat, un outil de relais polyvalent pour Linux

  5. Premiers pas avec PostgreSQL sous Linux

Premiers pas avec le système d'exploitation Linux

Premiers pas avec GitHub

Premiers pas avec le gestionnaire de paquets Nix

Premiers pas avec systemctl

Premiers pas avec la commande AWK [Guide du débutant]

Premiers pas avec la commande Tar