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 marronSé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,5Awk 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
ananasEnregistrement 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.