
Hola, estoy intentando crear un script que lea mi archivo, tome todas las variables que necesita y luego las use para otro comando. Pero parece que las variables no se memorizan, porque probé printf en lugar de ejecutar mi script y obtuve un resultado vacío.
aquí está mi 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
Y aquí está el contenido de tots.txt:
Respuesta1
Esto se debe a que sus variables se configuran en el subshell que abre diciendo cat <file> | while ...
. Entonces, cuando finalice esta subcapa, ya no podrá acceder a esas variables.
En lugar de eso, diga:
while read; do
...
done < tots.txt
Lectura interesante:Configuré variables en un bucle que está en una tubería. ¿Por qué desaparecen una vez finalizado el ciclo? O, ¿por qué no puedo canalizar datos para leer?.
Tenga en cuenta también que parece tener cierta confusión entre las variables awk
y shell
. Lo que sea que establezca awk
permanecerá allí, por lo que decirlo awk '{$var=2}'
es dos veces incorrecto: las variables en awk se configuran sin $
( $var
se referirá al número de columna var
) y luego la var está solo en el alcance de awk
y no está disponible en su Shell.
Quizás quieras hacer algo como:
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
Para que cree una matriz results[]
a la que pueda acceder más adelante.