script bash lido linha por linha

script bash lido linha por linha

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

aqui está 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 do tots.txt:

insira a descrição da imagem aqui

Responder1

Isso ocorre porque suas variáveis ​​estão sendo definidas no subshell que você abre dizendo cat <file> | while .... Portanto, quando esse subshell estiver concluído, você não poderá mais acessar essas variáveis.

Em vez disso, diga:

while read; do
    ...
done < tots.txt

Leitura interessante:Defino variáveis ​​em um loop que está em um pipeline. Por que eles desaparecem após o término do loop? Ou por que não consigo canalizar dados para leitura?.

Observe também que você parece ter alguma confusão entre as variáveis awk​​e shell. Tudo o que você definir awkpermanecerá lá, então dizer awk '{$var=2}'é duas vezes incorreto: as variáveis ​​​​no awk são definidas sem o $( $varse referirá ao número da coluna var) e então o var está apenas no escopo awke não está disponível no seu shell.

Talvez você queira fazer algo como:

results=($(awk 'BEGIN {print 1,2,3,"a"}'))

Para que você crie um array results[]que poderá acessar posteriormente.

informação relacionada