Estrutura de Repetição

1. Estrutura de Repetição

Luciano Magrini
lucianomagrini

(usa Linux Mint)

Enviado em 12/10/2015 - 17:11h

Boa tarde, alguém pode me ajudar?

Sou iniciante em Shell. Criei um script que deve ler um arquivo auxiliar composto por mais de cem linhas. Em cada uma das linhas está o nome de um arquivo e um parâmetro numérico. Quando executo o script, percebo que o script só lê a primeira linha do arquivo auxiliar. Como posso solucionar isso? Já tentei algumas dicas daqui do fórum, mas meu nível iniciante não me permite achar o problema. Alguém pode ajudar, por favor? Desde já agradeço.

______
while read -r arqq dado
do
ARQ=${arqq}
scalamax=${dado}
nscala=$((2*scalamax))

i=${ARQ}
echo $i

rm -f OK_${ARQ}
touch OK_${ARQ}
while read -r co1 co2 co3 co4 co5 co6 co7 co8 co9
do
if [ ${co7} == "9.9999900e+003" ]
then
echo "${co7} 0" >> OK_${i}
else
echo "${co7} 1" >> OK_${i}
fi

done < namelist.txt


  


2. Re: Estrutura de Repetição

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 13/10/2015 - 19:34h

Olá,

Alguma duvidas...

1) Esse é apenas um trecho do script ou esta completo? Se esta completo, faltou indiciar o interpretador Ex: #!/bin/bash

2) Vc tem uma variável (nscala) que não esta sendo utilizada. (Ao menos nesse trecho)

3) Faltou fechar o loop e indicar o arquivo a ser lido pelo segundo while.

4) Poderia postar algumas linhas de exemplo do(s) arquivo(s) lido(s) pelo(s) while(s) ?

Enquanto não temos as respostas, arrisco as sugest&#7757;es abaixo:

A) Supondo que falta fechar e indicar o arquivo para o segundo while:
#!/bin/bash

while read -r arqq dado
do
ARQ=${arqq}
scalamax=${dado}
nscala=$((2*scalamax))
i=${ARQ}
echo $i

rm -f OK_${ARQ}
touch OK_${ARQ}
while read -r co1 co2 co3 co4 co5 co6 co7 co8 co9
do
if [ ${co7} == "9.9999900e+003" ]
then
echo "${co7} 0" >> OK_${i}
else
echo "${co7} 1" >> OK_${i}
fi
done < arquivo_a_ser_lido_loop2
done < namelist.txt


B) Supondo que seja o mesmo arquivo a ser lido, vc não precisa de um loop dentro de outro:
#/bin/bash
while read -r arqq dado co3 co4 co5 co6 co7 co8 co9
do
ARQ=${arqq}
scalamax=${dado}
nscala=$((2*scalamax))
i=${ARQ}
echo $i
rm -f OK_${ARQ}
touch OK_${ARQ}
if [ ${co7} == "9.9999900e+003" ]
then
echo "${co7} 0" >> OK_${i}
else
echo "${co7} 1" >> OK_${i}
fi
done < namelist.txt



Abs,




---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts