casting à int dans awk
Je suis à la recherche d'une méthode pour convertir une chaîne en un int en awk. J'ai le texte suivant, qui semble être de faire une comparaison de chaîne
(note: terrain de 5 $est un pourcentage dans un des deux formats; 80%, ou 9,0%)
awk '{if (substr($5,1,(length($5)-1)) >= 90) ...
Donc, quand j'ai modifier:
awk '{if (substr($5,1,(length($5)-1))+0 >= 90+0 ) ...
Il compare comme je l'ai prévu. Est-ce la bonne fonte? Est-il une "meilleure" façon d'effectuer la distribution?
source d'informationauteur xelco52
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser +0. dire variable
v
est votre pourcentage de la valeur.Vous n'avez pas à se débarrasser de la
%
signe.La plupart des nouveaux awks ont une fonction int ().
Mais la méthode de coulée documentée dans 'Le Langage de Programmation Awk' est montré comme vous le faites, en utilisant numericValue et
+0
. Je n'ai pas le livre à portée de main, mais je pense que vous pouvez aussi voter pour float valeur à l'aide de+0.0
.J'espère que cette aide.
Selon les docs
int(x)
est conforme à POSIX. Le nombre sera toujours un flotteur (puisque tous les numéros dans awk sont à virgule flottante), mais elle sera tronquée à un int.L'ajout de 0 à ne pas convertir une chaîne en un entier (int). Il vous permet de convertir à un flotteur.
Si vous avez un vieux
awk
basé sur Le seul Vrai AWK par Brian Kernighan, comme macOSawk
ou FreeBSDawk
vous verrez cette au bas de la page de manuel:À la force d'une expression à être traité comme un numéro de ajouter 0
Si vous n'avez pas de soins sur les flotteurs et vous avez
gawk
vous pouvez également utiliserstrtonum
D'autres sources:
Version OS X de AWK, qui est dérivé de "Le seul Vrai AWK” par Brian Kernighan
Tous les numéros de
awk
sont à virgule flottante:Rechercher "Tous arithmétique doit suivre la sémantique de l'arithmétique à virgule flottante, comme spécifié par le standard ISO C"
Recherche de "tous les numéros dans awk sont flottante"