bash script ler linha por linha

0

Olá, estou tentando criar um script que leia meu arquivo, pegue toda a variável necessária e use-o para outro comando. Mas parece que as variáveis não estão sendo memorizadas, porque tentei um printf em vez de executar meu script e obtive uma saída vazia.

aqui está o meu código

#!/bin/bash
numparams=$#
params=$*
cat tots.txt | while read;
do  awk '{
regid=$1;
uport=$2;
ongoingcalls=$3;
ingeg=$4;
maxcalls=$5;
if($3<$5) state=0
if($3==$5) state=1
if($3>$5) state=2
}'
/home/send_script.sh -o "$regid $uport $ongoingcalls $ingeg $maxcalls $state"
done

E aqui está o conteúdo tots.txt:

    
por Peter Hayek 11.12.2015 / 11:01

1 resposta

1

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.

    
por 11.12.2015 / 12:36