Comment vérifier si la valeur de la variable dans le script AWK est null ou vide?
- j'utiliseawk script pour traiter certains journaux.
- À un endroit, j'ai besoin de vérifier si la valeur de la variable null ou vide pour rendre une décision.
Une idée de comment réaliser la même chose?
awk '
{
{
split($i, keyVal, "@")
key=keyVal[1];
val=keyVal[2];
if(val ~ /^ *$/)
val="Y";
}
}
' File
J'ai essayé avec
1) if(val == "")
2) if(val ~ /^ *$/)
Ne fonctionne Pas dans les deux cas.
3 réponses
La comparaison avec ""
aurait dû fonctionner, donc c'est un peu étrange
Comme une autre alternative, vous pouvez utiliser la fonction length()
, si zéro, votre variable est null / empty. Par exemple,
if (length(val) == 0)
En outre, peut-être la variable intégrée NF
(Nombre de champs) pourrait être utile? Puisque nous n'avons pas accès à vos données d'entrée, il est difficile de dire, mais une autre possibilité.
Cela fonctionne très bien pour moi
$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty
Vous ne pouvez pas faire la différence entre la variable étant vide et null, lorsque vous accédez à la variable" unset", awk l'initialise simplement avec la valeur par défaut (ici c'est ""
- chaîne vide). Vous pouvez utiliser une sorte de solution de contournement, par exemple, la mise en val_accessed
variable 0
, puis sur 1
lorsque vous y accédez. Ou une approche plus simple (un peu "hackish") définissant val à "unitialized"
(ou à une autre valeur qui ne peut pas apparaître lors de l'exécution de votre programme).
PS: votre script me semble étrange, à quoi servent les parenthèses imbriquées?
Vous pouvez utiliser directement la variable sans comparaison, une valeur vide/null/Zéro est considérée false
, tout le reste est true
.
Voir ici :
# setting default tag if not provided
if (! tag) {
tag="default-tag"
}
, Donc ce script contient la variable tag
avec la valeur default-tag
, sauf si l'utilisateur de l'appeler comme ceci :
$ awk -v tag=custom-tag -f script.awk targetFile
C'est vrai à partir de : GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)