Как проверить, является ли значение переменной в AWK script нулевым или пустым?
- Я использую AWK script для обработки некоторых журналов.
- В одном месте мне нужно проверить, является ли значение переменной null или пустым, чтобы принять какое-то решение.
Любая идея, как добиться того же?
awk '
{
{
split($i, keyVal, "@")
key=keyVal[1];
val=keyVal[2];
if(val ~ /^ *$/)
val="Y";
}
}
' File
Я пробовал с
1) if(val == "")
2) if(val ~ /^ *$/)
не работает в обоих случаях.
Ответы
Ответ 1
Сравнение с ""
должно было работать, так что бит нечетный
В качестве еще одной альтернативы вы можете использовать функцию length()
, если она равна нулю, ваша переменная имеет значение null/empty. Например.
if (length(val) == 0)
Кроме того, может понадобиться встроенная переменная NF
(количество полей)? Поскольку у нас нет доступа к вашим входным данным, сложно сказать, но еще одна возможность.
Ответ 2
Он отлично работает для меня
$ awk 'BEGIN{if(val==""){print "null or empty"}}'
null or empty
Вы не можете различать между пустой и пустой переменными, когда вы получаете доступ к переменной "unset", awk просто инициализирует ее значением по умолчанию (здесь это ""
- пустая строка). Вы можете использовать какое-то обходное решение, например, при установке переменной val_accessed
на 0
, а затем на 1
при доступе к ней. Или более простой подход (несколько "хакерский" ), устанавливающий значение val в "unitialized"
(или какое-то другое значение, которое не может появиться при запуске вашей программы).
PS: ваш script выглядит странно для меня, какие вложенные скобки для?
Ответ 3
Вы можете напрямую использовать переменную без сравнения, пустое/нулевое значение считается false
, все остальное - true
.
Смотрите здесь:
# setting default tag if not provided
if (! tag) {
tag="devf"
}
Таким образом, этот script будет иметь переменную tag
со значением devf
, за исключением случаев, когда пользователь вызывает это следующим образом:
$ awk -v tag=custom -f script.awk targetFile
Это верно:
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)