Problema da linha de leitura

4

Eu tenho um script que precisa examinar um arquivo lst e ler a linha e imprimir a linha, se não houver mais nada na lista necessária para sair do script, mas o script abaixo está em loop e o arquivo lst tem dois números (man, san).

vi do.lst 
man
san

code: =

  cat /ora/do.lst
  while read -r line
  do
   if [[ -z $line ]]
     then
         echo "The list is empty "
          exit
  else
      lst_no=${line},
      echo "${line} is processing now "
  fi
  done
    
por Rak kundra 23.07.2017 / 18:18

1 resposta

7

Tudo parece bem, você só precisa canalizar um cat para o loop:

cat /ora/do.lst |  while read -r line
  do
   if [[ -z $line ]]
     then
       echo "The list is empty "
       exit
     else
      lst_no=${line},
      echo "${line} is processing now "
   fi
done

Esta não é, obviamente, a melhor maneira de processar linhas, mas presumo que seja apenas para fins de aprendizagem.

Um pouco melhor seria, pelo menos, evitar cat inútil e pipe desnecessário:

while read -r line; do
...
done </ora/do.lst

ou melhor ainda, para preservar stdin para comandos dentro de loop:

while read -r line <&3; do
...
done 3</ora/do.lst

No entanto, se o seu arquivo tiver muitas linhas, convém reescrever o script em awk , perl ou outra ferramenta dedicada à tarefa de processamento de texto. Loops de shell não são otimizados nesse sentido.

    
por 23.07.2017 / 18:36

Tags