Caixa ocupada Ler arquivo linha por linha

4

Não há um applet de leitura com a caixa ocupada.

Existe alguma maneira de ler um arquivo txt linha por linha usando o busybox?

O que eu tenho agora é

while read line
do
     echo $line
done < "$InputFile"
    
por limovala 19.08.2013 / 07:26

2 respostas

10

read é um shell embutido (não poderia definir uma variável de shell se não fosse).

Então, se o seu busybox sh for baseado em ash , é:

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"

Como em qualquer shell POSIX. Mas, como acontece com qualquer shell, o uso de while read loops para processar texto é geralmente uma prática ruim de script de shell .

Acima, você precisa:

  • IFS= , caso contrário, os espaços e as guias sem escape e principais são removidos das linhas
  • -r , caso contrário, as barras invertidas serão tratadas como um caractere de escape e removidas (a menos que tenham escapado)
  • printf , não echo que não funcionaria para linhas que são, por exemplo, -nene
  • "$line" entre aspas (não $line ), caso contrário, o conteúdo da linha será dividido em espaços e tabulações e os padrões de distribuição serão expandidos.
  • <&3 e 3< ... , se você precisar acessar o stdin original dentro do loop.

Se o arquivo contiver caracteres após a última linha e você quiser exibi-los, você poderá adicionar após o loop:

[ -z "$line" ] || printf %s "$line"

Observe que esse loop não pode manipular dados binários (o caractere NUL ).

    
por 19.08.2013 / 07:51
0

Consegui resolver minha exigência usando

head testInputs/test1 -n $getLineNum | tail -n 1

getLineNum é incrementado em cada loop while.

mas não é a resposta exata para a minha pergunta.

Além disso, você precisa adicionar algo como #EOF na última linha e procurá-lo para quebrar o loop.

    
por 19.08.2013 / 08:17

Tags