AWK est une commande Linux puissante de Linux et UNIX pour le traitement de texte.
C'est aussi un langage de script à part entière.
Pour cela, il propose une multitude de fonctions, opérateurs et même la possibilité de faire des boucles.
Dans ce tutoriel, je vous présente la plupart des fonctions, opérateurs et boucles AWK et leurs utilisations à travers des exemples.
Les déclaration et boucles avec AWK
if-else
if-else permet d'évaluer des expressions, si l'expression if est vrai, l'action est exécuté sinon else est exécuté.
Par exemple ci-dessous on parcourt le fichier employes.csv et on compare la colonne 2 et 3.
Si la colonne 2 est 3 sont identiques alors cela affiche leur valeur sinon le message Pas de colonnes dupliquées s'affiche.
awk -F ',' '{if($2==$3){print $1","$2","$3} else {print $2 " Pas de colonnes dupliquées"}}' employes.csv
On peut aussi utiliser if else avec plusieurs instructions ou expressions grâce aux opérateurs logiques.
Par exemple si dessus, on teste si les colonnes 1 et 2 ET les colonnes 3 est 4 sont identiques.
IF retourne vrai seulement si les deux groupes de colonnes sont identiques en même temps.
awk -F ',' '{if($1==$2 && $3==$4){print $1","$2","$3} else {print $2 " Pas de colonnes dupliquées"}}' employes.csv
for
La boucle for s'exécute un certains nombres de fois que l'on l'expression est vrai.
En général, il s'agit d'incrémenter ou décrémenter un compteur.
awk 'BEGIN { for (i = 1; i <= 10; ++i) print "La somme de", i, "est", i*2; ++i }'
La somme de 1 est 2
La somme de 2 est 4
La somme de 3 est 6
La somme de 4 est 8
La somme de 5 est 10
La somme de 6 est 12
La somme de 7 est 14
La somme de 8 est 16
La somme de 9 est 18
La somme de 10 est 20
while
La boucle while est une boucle qui continue de s'exécuter tant que l'expression testée est vraie.
Par exemple ci-dessous, on calcule la somme des 10 premiers chiffrés grâce au test while (i < 10) :
awk 'BEGIN { i = 1; while (i < 10) { print "La somme de", i, "est", i*2; ++i } }'
La somme de 1 est 2
La somme de 2 est 4
La somme de 3 est 6
La somme de 4 est 8
La somme de 5 est 10
La somme de 6 est 12
La somme de 7 est 14
La somme de 8 est 16
La somme de 9 est 18
Les opérateurs AWK
OPERATEUR | DESCRIPTION |
(...) | Pour grouper |
$ | Les opérateurs qui référencent les champs |
++ -- | Incrémente et décrémente |
^ | L'exponentiation (** peut également être utilisée et ** = pour l'opérateur d'affectation). |
+ -! | Unary Plus, moins la négation logique. |
/% | Multiplication, division et module. |
+ - | Ajout et soustraction. |
Caractère espace | Concaténation de la chaîne spatiale. |
| | & | Pipe d'E / S pour GetLine, Imprimer et Printf. |
<> <=> = ==! = | Les opérateurs relationnels réguliers. |
~! ~ | Match d'expression régulier, match nié. Remarque: N'utilisez pas d'expression régulière constante (/ FOO /) sur le côté gauche d'un ~ ou! ~. Utilisez seulement une sur le côté droit. L'expression / foo / ~ exp a le même signification que (($ 0 ~ / foo /) ~ exp). Ce n'est généralement pas ce que vous voulez. |
In | dans l'adhésion au tableau. |
&& | Opérateur logique et. |
|| | Opérateur logique ou. |
?: | L'expression conditionnelle C. Cela a la forme expr1? EXPR2: EXPR3. Si EXPR1 est vrai, la valeur de l'expression est EXPR2, sinon elle est expr3. Un seul des EXPR2 et EXPR3 est évalué. |
= + = - = * = = / =% = ^ = | Mission. L'attribution absolue (var = valeur) et l'attribution de l'opérateur (les autres formulaires) sont prises en charge. |
Les opérateurs de comparaison
Par exemple ci-dessous, on affiche les lignes d'un fichier dont les données de la seconde colonne commencent par un B ou un R.
Pour cela, on utilise des expressions régulières.
Les classes de caractères, [], dans des expressions régulières sont utilisées pour correspondre à un seul caractère sur ceux spécifiés entre crochets. Ici, nous combinons l'opérateur de match (~) avec des classes de caractères (/ ^ [br] /) pour imprimer toutes les lignes dans lesquelles le deuxième champ commence par le caractère "B" ou "R", comme suit:
awk ' $2 ~ /^[BR]/ {print NR, $0 } ' fichier.txt
Le signe dollar ($) dans l'expression régulière (également appelé ancre) est utilisé pour correspondre à la fin d'une ligne. Dans les exemples suivants, nous combinons avec l'opérateur de match (~) pour imprimer toutes les lignes de la deuxième extrémité du champ avec le caractère «e», comme suit:
awk ' $2 ~ /e$/ {print NR, $0 } ' fichier.txt
Enfin vous pouvez utiliser des opérateurs de relation (==,> =, <=,>, <,! =) Pour effectuer une comparaison numérique. Ici, nous effectuons un chiffre supérieur ou égal (> =) pour imprimer les lignes qui ont la valeur 22 ou plus dans le troisième champ, comme suit:
awk ' $3 >= 22 {print NR, $0 } ' fichier.txt
L'opérateur logique ET
On utilise && pour évaluer deux expressions à vraies.
La syntaxe est :
expr1 && expr2
Ci-dessous, on demande à afficher les lignes entre 1 et 4, soit donc lorsque NR est supérieur à 1 ET inférieur à 4.
awk 'NR>1 && NR < 4' fichier
Voici un autre exemple qui vérifie que la valeur est comprise entre 0 et 7.
awk 'BEGIN {
num = 5; if (num >= 0 && num <= 7) printf "%d est au format octal\n", num
}'
L'opérateur logique OU
Evalue une opération à vrai si un des deux éléments est vrai.
Pour cela, on utilise || avec la syntaxe suivante :
expr1 || expr2
Ci-dessous, le texte s'affiche puisque les deux expressions sont vrais :
awk 'BEGIN {
num = 2; if (num >= 0 || num <= 7) printf "Ce texte va s'\''afficher\n"}'
Là aussi puisque la première expression retourne vrai (num est bien supérieur à 0) :
awk 'BEGIN {
num = 9; if (num >= 0 || num <= 7) printf "Ce texte va s'\'' afficher\n"}'
En revanche ci-dessous, rien ne va s'afficher puisque les deux expressions sont fausses :
awk 'BEGIN {
num = 9; if (num == 0 || num == 7) printf "Ce texte va s'\'' afficher\n"}'
Les opérateurs mathématiques
Utilisez les caractères suivants afin d'effectuer une opération mathématique :
- + : addition
- - : soustractions
- * : multiplication
- / : division
- % : pourcentage
Pour afficher l'opération avec son résultat en utilisant des variables :
awk 'BEGIN { a = 50; b = 20; print "(a / b) = ", (a / b) }'
Sinon pour afficher directement le résultat d'une opération mathématique :
awk 'BEGIN { a = 50; b = 20; print (a / b) }'
Un exemple identique d'opération mathématique avec un pourcentage :
awk 'BEGIN { a = 50; b = 20; print "(a % b) = ", (a % b) }'
Pour afficher le carré :
awk 'BEGIN { i = 1; while (i < 6) { print "Le carré de", i, "est", i*i; ++i } }'
Le carré de 1 est 1
Le carré de 2 est 4
Le carré de 3 est 9
Le carré de 4 est 16
Le carré de 5 est 25
Les opérateurs pour incrémenter et décrémenter
Pour incrémenter ou décrémenter des variables, on utilise les opérateurs suivants :
- ++ : pour incrémenter des valeurs
- -- : pour décrémenter des valeurs
Par exemple ci-dessous, on créé une variable i avec une valeur 1, puisque une boucle while qui tourne jusqu'à ce que la valeur i atteigne 6.
On incrémente chaque la variable i après l'avoir affiché dans print.
awk 'BEGIN { i = 1; while (i <= 6) { print "Ligne", i; ++i } }'
Le même exemple où cette fois-ci on décrémente la variable i qui débute avec la valeur 6.
La boucle while s'arrête lorsque i passe en dessous de la valeur 1, ce qui donne un décompte :
awk 'BEGIN { i = 6; while (i => 1) { print "Ligne", i; --i } }'
Les opérations sur les STRING
On peut aussi concaténer des variables textes très facilement.
Par exemple ci-dessous, on créé les variables str1 et str2 que l'on concatène dans str3 pour afficher en sortie avec print :
awk 'BEGIN { str1 = "Hello, "; str2 = "World"; str3 = str1 str2; print str3 }'
Les fonctions AWK sur le texte
FONCTIONS | DESCRIPTION |
gsub(r,s,t) | Remplacer toutes les occurrence de r par s dans la chaîne t |
index(s,t) | Retourne la position la plus à gauche de la chaine t dans la chaine s |
length(s) | Renvoyer la longueur de la chaine s |
match(s,r) | Retourner l'index ou s correspond à r et positionne RSTART et RLENTH |
split(s,a,fs) | Split s dans le tableau a sur fs, retourne le nombre de champs |
sprintf(fmt,liste expressions) | Retourne la liste des expressions formattée suivant fmt |
sub(r,s,t) | Comme gsub, mais remplace uniquement la première occurrence |
substr(s,i,n) | retourne la sous chaine de s commençant en i et de taille n |
toupper, tolower : convertir un texte en minuscules, majuscules
On utilise ces fonctions pour passer un texte en majuscules ou minuscules en spécifiant une variable comme une colonne.
Pour passer tout un fichier en majuscules :
awk '{print toupper($0)}' employes.txt
Par exemple pour passer la première colonne en majuscules :
awk '{print toupper($1) " " $2 " " $3}' FS=, employes.csv
gsub : rechercher/remplacer
gsub est une fonction qui permet de rechercher et remplacer des occurences.
Par exemple, ci -dessous, on remplace le mot Ubuntu par Débian :
echo "J'aime Ubuntu"| awk '{ gsub(/Ubuntu/,"Debian"); print $0}'
J'aime Debian
Dans cet autre exemple, gsub(/,/," ") remplace la virgule par le caractère espace.
awk '{ gsub(/,/," "); print $1 $2 $3}' FS=, employes.csv
substr
substr permet d'effectuer du rechercher/remplacer du n caractère d'un mot.
Par exemple pour mettre en majuscule la première lettre d'un mot :
echo "merci d'écrire la première lettre en majuscule"|awk '{ $0 = toupper(substr($0,1,1)) substr($0,2) } $0'
Pour passer en majuscule le premier mot de la 3e colonne d'un fichier :
awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' employes.txt
length
length permet de tester la longueur d'une chaîne de caractères.
Par exemple pour afficher seulement les lignes d'un fichier qui ont plus de 10 caractères.
awk 'length($0) > 10' employes.txt
Les fonctions AWK mathématiques
FONCTIONS | DESCRIPTION |
atan2(y, x) | Renvoyer l'arc tangent de y / x dans les radians |
cos(expr) | Retourner le cosinus de EXPR, qui est dans les radians |
exp(expr) | Calculez une exponentielle |
int(expr) | Renvoyer la valeur entier |
log(expr) | Pour utiliser une fonction logarithme naturelle |
rand() | Renvoyer un nombre aléatoire N, entre zéro et un, tel que 0 ≤ n <1 |
sin(expr) | Renvoyez le sinus d'Expr, qui est dans les radians |
sqrt(expr) | Renvoyer la racine carrée de Expr |
srand([expr]) | Réinitialiser la fonction de génération de nombre aléatoire |
SUM : faire la somme de colonnes
SUM vous donne la possibilité de faire la somme les valeurs d'une colonne.
awk '{ SUM=SUM+$5; print "Ligne: "NR " "$5 } END { print "Le total est : "SUM }' FS=, OFS=, employes.csv
Ligne: 1 10
Ligne: 2 8
Ligne: 3 7
Ligne: 4 9
Le total est : 34
COUNT : compter le nombre d'occurrences
COUNT permet de compter le nombre d'occurence.
Par exemple pour compter le nombre de lignes vides d'un fichier :
awk '/./ { COUNT+=1 } END { print COUNT }' fichier
Liens
- 12 exemples pour utiliser la commande cat sur Linux
- 6 exemples pour utiliser la commande tail sur Linux
- Comment utiliser la commande less sur Linux avec des exemples
- La commande cut de Linux : utilisation et exemples
- Comment utiliser la commande AWK avec des exemples
- Commande sed : utilisation et exemples
- 12 exemples de commandes grep sur Linux
L’article AWK : Utilisation et exemples fonctions, opérateurs et boucles est apparu en premier sur malekal.com.
0 Commentaires