Exécution de commandes Awk dans PowerShell
awk
est un langage de script pour la manipulation de données et la génération de rapports. awk
est un langage de programmation en ligne de commande qui prend en charge les variables, les fonctions de texte, les fonctions numériques et les opérateurs logiques sans compilation.
Malheureusement, awk
n’est pas entièrement intégré à PowerShell car il utilise le système d’exploitation Windows. Cet article explique comment nous pouvons utiliser des commandes et des fonctions similaires aux commandes awk
à l’aide de PowerShell.
Exécuter des commandes awk
dans PowerShell
L’utilitaire awk
permet aux programmeurs de créer des programmes brefs mais puissants sous la forme d’instructions qui spécifient des modèles de texte, ce qui peut être étrange pour les utilisateurs non familiarisés avec les commandes Linux ou Linux en général. Ces modèles de texte sont recherchés dans chaque ligne et une action est entreprise lorsqu’une correspondance est trouvée.
awk
est principalement utilisé pour la numérisation et le traitement des modèles. Il explore un ou plusieurs fichiers pour voir s’ils contiennent des lignes qui correspondent aux modèles spécifiés, puis exécute les actions associées.
L’extrait de code suivant est un exemple de commande qui utilise awk
.
awk '/"Box11"/ { print $0 }' test.txt|awk '{ SUM += $4} END { print SUM} '
Pour effectuer des opérations similaires comme les commandes awk
, nous utiliserions la commande Get-Content
pour obtenir le contenu d’un fichier et effectuer quelques opérations de chaîne dans Windows PowerShell. Si nous prenons l’exemple ci-dessus, voici à quoi cela ressemblerait dans PowerShell.
Exemple de code :
Get-Content c:\temp\test.txt |
Where-Object{$_ -match '"Box11"'} |
ForEach-Object{($_ -split "\s+")[3]} |
Measure-Object -Sum |
Select-Object -ExpandProperty Sum
- La commande
Get-Content
récupère le contenu du fichier texte. - La commande
Where-Object
filtrera les lignes avec la chaîneBox11
. - Ensuite, une fois filtré, le script bouclera pour diviser chaque chaîne de ligne en son 4ème élément. N’oubliez pas que PowerShell commence à l’index
0
; ainsi, nous utilisons l’index3
au lieu de4
, contrairement à notre commandeawk
. - Le
Measure-Object
effectuera un calcul sur la propriété, où il s’agit deSum
dans ce cas. - Enfin, le
Select-Object
affichera la propriété étendueSum
.
Si nous remarquons, notre version PowerShell de la commande awk
est légèrement plus longue. Heureusement que dans PowerShell, nous pouvons créer des raccourcis en utilisant des alias et quelques opérateurs PowerShell.
Exemple de code :
gc c:\temp\test.txt | ?{$_ -match '"Box11"'} | %{(-split $_)[3]} |
Measure -Sum | Select -Exp Sum
Alternativement, si vous avez activé WSL (Windows Subsystem for Linux), nous pouvons exécuter les commandes awk
telles quelles. Une fonctionnalité du système d’exploitation Windows appelée sous-système Windows pour Linux (WSL) vous permet d’exécuter un système de fichiers Linux, complet avec des outils de ligne de commande Linux et des applications graphiques, directement sur Windows.
Il faut donc appeler la commande wsl
et exécuter les commandes awk
en natif.
Exemple de code :
wsl -e awk '/"Box11"/{sum += $4} END{print sum}' test.txt
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn