Isso ocorre porque suas variáveis estão sendo definidas no subshell que você abre, dizendo cat <file> | while ...
. Então, quando essa subshell estiver pronta, você não poderá mais acessar essas variáveis.
Em vez disso, diga:
while read; do
...
done < tots.txt
Interessante leitura: Eu defino variáveis em um loop que está em um pipeline. Por que eles desaparecem depois que o loop termina? Ou, por que não posso enviar dados para ler? .
Note também que você parece ter alguma confusão entre as variáveis awk
e shell
. O que quer que você defina em awk
permanecerá lá, então dizer awk '{$var=2}'
é duas vezes incorreto: variáveis no awk são definidas sem o $
( $var
se referirá ao número da coluna var
) e então o var é apenas no escopo de awk
e não disponível no seu shell.
Talvez você queira fazer algo como:
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
Para criar uma matriz results[]
que você possa acessar mais tarde.