Dans ce guide convivial pour les débutants, vous apprendrez les bases du awk
commande. Vous verrez également quelques-unes des façons dont vous pouvez l'utiliser lorsque vous traitez du texte.
Commençons !
Qu'est-ce que le awk
commande ?
awk
est un langage de script, et il est utile lorsque vous travaillez dans la ligne de commande. C'est aussi une commande largement utilisée pour le traitement de texte.
Lors de l'utilisation de awk
, vous pouvez sélectionner des données (un ou plusieurs éléments de texte individuel) en fonction d'un modèle que vous fournissez.
Par exemple, certaines des opérations que vous pouvez effectuer avec awk
recherchez un mot ou un motif spécifique dans un morceau de texte donné, ou même sélectionnez une certaine ligne ou une certaine colonne dans un fichier que vous fournissez.
La syntaxe de base de awk
commande
Dans sa forme la plus simple, le awk
La commande est suivie d'un ensemble de guillemets simples et d'un ensemble d'accolades, avec le nom du fichier dans lequel vous souhaitez effectuer la recherche mentionné en dernier.
Cela ressemble à ceci :
awk '{action}' your_file_name.txt
Lorsque vous souhaitez rechercher un texte qui a un modèle spécifique ou que vous recherchez un mot spécifique dans le texte, la commande ressemblera à ceci :
awk '/regex pattern/{action}' your_file_name.txt
Comment créer un exemple de fichier
Pour créer un fichier en ligne de commande, vous utilisez le touch
commande.
Par exemple :touch filename.txt
où filename
, est le nom de votre fichier.
Vous pouvez ensuite utiliser le open
commande (open filename.txt
), et un programme de traitement de texte comme TextEdit s'ouvrira où vous pourrez ajouter le contenu du fichier.
Donc, disons que vous avez un fichier texte, information.txt
, qui contient des données séparées dans différentes colonnes.
Le contenu du fichier pourrait ressembler à ceci :
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Dans mon exemple, il y a une colonne pour firstName
, lastName
, age
, city
, et ID
.
A tout moment, vous pouvez visualiser la sortie du contenu de votre fichier en tapant cat text_file
, où text_file
est le nom de votre fichier.
Comment imprimer tout le contenu du fichier en utilisant awk
Pour imprimer tous le contenu d'un fichier, l'action que vous spécifiez à l'intérieur des accolades est print $0
.
Cela fonctionnera exactement de la même manière que le cat
commande mentionnée précédemment.
awk '{print $0}' information.txt
Sortie :
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
Si vous souhaitez que chaque ligne ait un nombre de lignes, vous utiliserez le NR
variable intégrée :
awk '{print NR,$0}' information.txt
1 fristName lastName age city ID
2
3 Thomas Shelby 30 Rio 400
4 Omega Night 45 Ontario 600
5 Wood Tinker 54 Lisbon N/A
6 Giorgos Georgiou 35 London 300
7 Timmy Turner 32 Berlin N/A
Comment imprimer des colonnes spécifiques en utilisant awk
Lors de l'utilisation de awk
, vous pouvez spécifier certaines colonnes que vous souhaitez imprimer.
Pour faire imprimer la première colonne, vous utilisez la commande :
awk '{print $1}' information.txt
Sortie :
Thomas
Omega
Wood
Giorgos
Timmy
Le $1
représente le premier champ, dans ce cas la première colonne.
Pour imprimer la deuxième colonne, vous utiliseriez $2
:
awk '{print $2}' information.txt
Sortie :
lastName
Shelby
Night
Tinker
Georgiou
Turner
La façon dont awk
détermine où chaque colonne commence et se termine avec un espace, par défaut.
Pour imprimer plus d'une colonne, par exemple les première et quatrième colonnes, vous feriez :
awk '{print $1, $4}' information.txt
Sortie :
fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin
Le $1
représente le premier champ de saisie (première colonne), et le $4
représente le quatrième. Vous les séparez par une virgule, $1,$4
, de sorte que la sortie comporte un espace et est plus lisible.
Pour imprimer le dernier champ (la dernière colonne), vous pouvez aussi utiliser $NF
qui représente le dernier champ dans un enregistrement :
awk '{print $NF}' information.txt
Sortie :
ID
400
600
N/A
300
N/A
Comment imprimer des lignes spécifiques d'une colonne
Vous pouvez également spécifier la ligne que vous souhaitez imprimer à partir de la colonne de votre choix :
awk '{print $1}' information.txt | head -1
Sortie :
FirstName
Décomposons cette commande. awk '{print $1}' information.txt
imprime la première colonne. Ensuite, la sortie de cette commande (que vous avez vue plus tôt) est canalisée , en utilisant le symbole pipe |
, à la commande principale, où son -1
l'argument sélectionne la première ligne de la colonne.
Si vous vouliez imprimer deux lignes, vous feriez :
awk '{print $1}' information.txt | head -2
Sortie :
FirstName
Dionysia
Comment imprimer des lignes avec un motif spécifique dans awk
Vous pouvez imprimer une ligne qui commence avec une lettre spécifique.
Par exemple :
awk '/^O/' information.txt
Sortie :
Omega Night 45 Ontario 600
Cette commande sélectionne n'importe quelle ligne avec du texte qui commence avec un O
.
Vous utilisez le symbole flèche vers le haut (^
) d'abord, qui indique le début d'une ligne, puis la lettre par laquelle vous voulez qu'une ligne commence.
Vous pouvez également imprimer une ligne qui se termine dans un modèle spécifique :
awk '/0$/' information.txt
Sortie :
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Cela imprime les lignes qui se terminent par un 0
– le $
Le symbole est utilisé après un caractère pour indiquer comment une ligne se terminera.
Cette commande pourrait également être changée en :
awk '! /0$/' information.txt
Le !
est utilisé comme NOT
, donc dans ce cas, il sélectionne les lignes qui NE se terminent PAS par un 0
.
fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Comment utiliser les expressions régulières dans awk
Pour sortir des mots qui contiennent certaines lettres et imprimer des mots qui correspondent à un modèle que vous spécifiez, vous utilisez à nouveau les barres obliques, //
, montré précédemment.
Si vous souhaitez rechercher des mots contenant on
, vous feriez :
awk ' /io/{print $0}' information.txt
Sortie :
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
Cela correspond à toutes les entrées qui contiennent io
.
Disons que vous aviez une colonne supplémentaire - un department
colonne :
fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering
Pour trouver toutes les informations des personnes travaillant dans IT
, vous devrez spécifier la chaîne que vous recherchez entre les barres obliques, //
:
awk '/IT/' information.txt
Sortie :
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT
Et si vous vouliez voir uniquement les noms et prénoms des personnes travaillant dans IT
?
Vous pouvez spécifier la colonne comme suit :
awk '/IT/{print $1, $2}' information.txt
Sortie :
Thomas Shelby
Wood Tinker
Cela n'affichera que les première et deuxième colonnes où IT
apparaît, au lieu de présenter tous les champs.
Lors de la recherche de mots avec un modèle spécifique, il peut arriver que vous deviez utiliser un caractère d'échappement, comme celui-ci :
awk '/N\/A$/' information.txt
Sortie :
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
Je voulais trouver des lignes qui se terminent par le motif N/A
.
Ainsi, lors de la recherche entre le ' // '
comme indiqué jusqu'à présent, j'ai dû utiliser un caractère d'échappement (\
) entre N/A
, sinon j'aurais eu une erreur.
Comment utiliser les opérateurs de comparaison dans awk
Si, par exemple, vous vouliez trouver toutes les informations des employés qui avaient moins de 40
, vous utiliseriez le <
opérateur de comparaison comme ceci :
awk '$3 < 40 { print $0 }' information.txt
Sortie :
Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
La sortie affiche uniquement les informations des personnes de moins de 40 ans.
Conclusion
Et voila! Vous connaissez maintenant les bases absolues pour commencer à travailler avec awk
et manipuler des données textuelles.
Pour en savoir plus sur Linux, freeCodeCamp propose une grande variété de supports d'apprentissage.
En voici quelques-unes pour vous aider à démarrer :
- Principes de base de Linux – Atelier pratique
- Linux pour les hackers éthiques (tutoriel Kali Linux)
- Le manuel des commandes Linux
Merci d'avoir lu et bon apprentissage 😊