AWK est un langage très petit qui ne dispose que de quelques types de données de base. Dans cette leçon, on va passer en revue les nombres et les strings.
Les nombres en AWK sont implémentés sous forme de nombres à virgule flottante en double précision. Il n'y a pas de distinction entre les entiers, les nombres à virgule flottante et les doubles.
AWK comprend les constantes numériques octales (qui commencent par 0) et les constantes numériques hexadécimales (qui commencent par 0x ou 0X).
On peut utiliser les opérateurs arithmétiques standards +, -, *, /, %.
L'opérateur d'exponentiation est ^.
Il existe quelques fonctions numériques intégrées, notamment les fonctions trigonométriques, la génération de nombres aléatoires, et int(x) pour tronquer un nombre vers l'entier le plus proche entre x et zéro.
Les strings en AWK sont des séquences de caractères. On écrit une constante string entre guillemets doubles.
Il n'existe qu'une seule opération sur les strings : la concaténation. La concaténation n'a pas d'opérateur dédié ; il suffit de placer deux strings côte à côte pour les concaténer :
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print est une instruction, pas une fonction.
print n'a pas besoin de parenthèses.
AWK dispose d'une multitude de fonctions de manipulation de strings. On les découvrira en détail au fil du parcours.
Il n'existe pas d'opérateur explicite pour convertir entre les nombres et les strings. AWK le fait implicitement, en fonction du contexte du programme. Cela rend très simple le travail avec les valeurs des champs en entrée : en général, AWK fait simplement ce que tu veux qu'il fasse.
print x + y convertit les valeurs des variables x et y en nombres grâce à l'opération numérique +.print x y convertit les valeurs des variables x et y en strings grâce à l'opération de concaténation.Si tu veux être explicite, 0 + x donne la représentation numérique de x et "" x donne la représentation sous forme de string de x.
La façon dont AWK convertit une string en nombre peut sembler déroutante. Une façon simple de voir les choses : AWK lit les « caractères numériques » depuis le début d'une string jusqu'à ce qu'il rencontre un caractère « non numérique ». Quelques exemples :
"2.5" se convertit en le nombre 2.5 ;"1e3" se convertit en le nombre 1000 (notation scientifique) ;"456abc" se convertit en le nombre 456 (comme a n'est pas un « chiffre », la conversion s'arrête là)."abc789" se convertit en le nombre 0 (il n'y a aucun chiffre au début de la string).Tu aides un ami à générer un rapport à partir de relevés qu'il a effectués dans différents coins de son jardin. Malheureusement, ton ami a enregistré les données dans un format étrange. Chaque relevé est un ensemble de champs séparés par des virgules. Cependant, il a réparti les nombres à deux chiffres sur deux colonnes.
| numéro de champ | signification |
|---|---|
| 1 | numéro d'identification |
| 2 | emplacement |
| 3 | premier relevé, chiffre des dizaines |
| 4 | premier relevé, chiffre des unités |
| 5 | deuxième relevé, chiffre des dizaines |
| 6 | deuxième relevé, chiffre des unités |
Pour une ligne d'entrée comme 101,house,4,2,5,4
42,54.Ta tâche consiste à calculer la moyenne des deux relevés et à afficher le résultat de chaque ligne au format suivant :
#<id>, <label> = <average>
Comme la moyenne de 42 et 54 vaut 48, le résultat pour la ligne d'exemple doit être :
#101, house = 48
Inscris-toi sur Exercism pour apprendre et maîtriser AWK avec 3 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.