Skip to main content

Comment écrire des commandes et des scripts AWK

Comment envoyer des mails HTML avec des pieces jointes depuis php (Mai 2025)

Comment envoyer des mails HTML avec des pieces jointes depuis php (Mai 2025)
Anonim

La commande awk est une méthode puissante pour traiter ou analyser des fichiers texte, en particulier des fichiers de données organisés en lignes (lignes) et en colonnes.

Simple awk les commandes peuvent être exécutées à partir de la ligne de commande. Les tâches plus complexes doivent être écrites sous forme de programmes awk (appelés scripts awk) dans un fichier.

Le format de base d'une commande awk ressemble à ceci:

awk 'pattern {action}' fichier d'entrée> fichier de sortie

Cela signifie: prenez chaque ligne du fichier d'entrée; si la ligne contient le motif, appliquez l'action à la ligne et écrivez la ligne résultante dans le fichier de sortie. Si le motif est omis, l'action est appliquée à toutes les lignes. Par exemple:

awk '{print $ 5}' table1.txt> output1.txt

Cette instruction prend l'élément de la 5ème colonne de chaque ligne et l'écrit en tant que ligne dans le fichier de sortie "output.txt". La variable '$ 4' fait référence à la deuxième colonne. De même, vous pouvez accéder aux première, deuxième et troisième colonnes, avec $ 1, $ 2, $ 3, etc. Par défaut, les colonnes sont supposées être séparées par des espaces ou des tabulations (appelées espaces). Donc, si le fichier d'entrée "table1.txt" contient ces lignes:

1, Justin Timberlake, Titre 545, Prix 7,30 $2, Taylor Swift, Titre 723, Prix 7,90 $3, Mick Jagger, Titre 610, Prix 7,90 $4, Lady Gaga, Titre 118, Prix 7,30 $5, Johnny Cash, titre 482, prix 6,50 $6, Elvis Presley, Titre 335, Prix 7,30 $7, John Lennon, Titre 271, Prix 7,90 $8, Michael Jackson, titre 373, prix 5,50 $

La commande écrirait ensuite les lignes suivantes dans le fichier de sortie "output1.txt":

545,723,610,118,482,335,271,373,

Si le séparateur de colonnes est autre chose que des espaces ou des tabulations, comme une virgule, vous pouvez le spécifier dans l'instruction awk comme suit:

awk -F, '{print $ 3}' table1.txt> output1.txt

Ceci sélectionnera l'élément de la colonne 3 de chaque ligne si les colonnes sont considérées séparées par une virgule. Par conséquent, la sortie, dans ce cas, serait:

Titre 545 Titre 723 Titre 610 Titre 118 Titre 482 Titre 335 Titre 271 Titre 373

La liste des instructions entre accolades ('{', '}') est appelée un bloc. Si vous placez une expression conditionnelle devant un bloc, l'instruction à l'intérieur du bloc ne sera exécutée que si la condition est vraie.

awk '$ 7 == " $ 7.30" {print $ 3}' table1.txt

Dans ce cas, la condition est $ 7 == " $ 7.30", ce qui signifie que l'élément de la colonne 7 est égal à 7,30 $. La barre oblique inverse devant le signe dollar sert à empêcher le système d’interpréter la variable $ 7 comme une variable et à prendre le signe dollar à la place.

Donc, cette instruction awk imprime l’élément dans la 3ème colonne de chaque ligne qui a un "$ 7.30" dans la colonne 7.

Vous pouvez également utiliser des expressions régulières comme condition. Par exemple:

awk '/ 30 / {print $ 3}' 'table1.txt

La chaîne entre les deux barres obliques ('/') est l'expression régulière. Dans ce cas, c'est juste la chaîne "30". Cela signifie que si une ligne contient la chaîne "30", le système imprime l'élément dans la 3ème colonne de cette ligne. La sortie dans l'exemple ci-dessus serait:

Timberlake, Gaga, Presley,

Si les éléments de la table sont des nombres, awk peut exécuter des calculs comme dans cet exemple:

awk '{print (2 $ * 3 $) + 7 $}'

Outre les variables qui accèdent aux éléments de la ligne actuelle ($ 1, $ 2, etc.), il existe la variable $ 0 qui fait référence à la ligne complète (ligne) et la variable NF qui contient le nombre de champs.

Vous pouvez également définir de nouvelles variables comme dans cet exemple:

awk '{sum = 0; pour (col = 1; col <= NF; col ++) sum + = $ col; somme imprimée; } '

Ceci calcule et affiche la somme de tous les éléments de chaque ligne.

Les instructions Awk sont souvent combinées avec des commandes sed.