Comment écrire des commandes et des scripts AWK
La commande awk est une méthode puissante pour traiter ou analyser des fichiers texte. En particulier, il analyse des fichiers de données organisés par lignes (lignes) et colonnes. Des commandes awk simples peuvent être exécutées à partir du ligne de commande. Les tâches plus complexes doivent être écrites en tant que programmes awk (appelés scripts awk) dans un fichier.

Principes de base d'AWK
Le format de base d'une commande awk ressemble à ceci:
awk 'pattern {action}' fichier d'entrée > fichier de sortie
Cela signifie: prendre 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 > sortie1.txt
L'instruction ci-dessus prend l'élément de la 5ème colonne de chaque ligne et l'écrit sous forme de ligne dans le fichier de sortie "output.txt". La variable '$4' fait référence à la quatriè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 espace blanc). 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 $
Ensuite, la commande écrirait les lignes suivantes dans le fichier de sortie "output1.txt":
545,
723,
610,
118,
482,
335,
271,
373,
Si le séparateur de colonne 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
Cela sélectionnera l'élément de la colonne 3 de chaque ligne si les colonnes sont considérées comme 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
Expressions conditionnelles dans AWK
La liste des déclarations à l'intérieur des accolades ('{','}') est appelée un bloc. Si vous mettez un 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 est utilisée pour empêcher le système d'interpréter $7 comme une variable et de prendre à la place le signe dollar littéralement.
Donc, cette instruction awk imprime l'élément à 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, il s'agit simplement de la chaîne "30". Cela signifie que si une ligne contient la chaîne "30", le système imprime l'élément à la 3ème colonne de cette ligne. Les sortir dans l'exemple ci-dessus serait:
Timberlake,
Gaga,
Presley,
Effectuer des calculs dans AWK
Si les éléments du tableau sont des nombres, awk peut exécuter des calculs sur eux comme dans cet exemple:
awk '{ imprimer (2 $ * 3 $) + 7 $ }'
Outre les variables qui accèdent aux éléments de la ligne courante (1 $, 2 $, etc.), il y a 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 '{ somme=0; pour (col=1; col<=NF; col++) somme += $col; imprimer la somme; }'
Ceci calcule et imprime la somme de tous les éléments de chaque ligne.
Les instructions Awk sont fréquemment combinées avec des commandes sed.