quando quero verificar se um valor retornado é inteiro ou não, uso isso no script bash:
if [ -z "$value" ]
then
echo 0
else
echo $value
fi
Eu estava tentando usar a z
opção em awk com if. por exemplo eu tenho esta linha:
PRIMARY SECONDARY CONNECTED 350 800
Eu tentei usar isso:
/bin/awk '{if( -z $1){print "0"}else{print $1}}' script
não importa se eu substituo $1
por $2
ou $3
ou $4
ou $5
ele sempre retorna 0
. estou usando o awk de forma errada?
-z
no shell não informará "se um valor é inteiro ou não", mas se seu comprimento é > 0.Você pode fazer o mesmo no awk com
length
--if(length($1)) ...
Se você quiser verificar se uma variável ou campo é um número ou não
awk
, você pode fazer isso:Sua
if(-z $1)
expressão simplesmente negará a variável unsetz
, que renderá0
e, em seguida, anexará0
ao$1
campo, criando uma string não vazia que sempre será considerada TRUE, mesmo que$1
seja a string vazia""
ou o número0
.Como outros já disseram, não há
-z
teste emawk
, e o-z
teste no shell testa strings vazias, não inteiros.Dentro
awk
você faria o seguinte para testar se uma variável está vazia (e produzirá um zero se estiver, ou seu valor se não estiver):ou,
Por exemplo:
para imprimir um zero para aquelas linhas cujo primeiro valor delimitado por tabulação na entrada está vazio e o valor real caso contrário.
Possivelmente relacionado (se você quiser encontrar o tipo de uma variável em
awk
):tentar
não há
-z
opção no awk.