lendo um arquivo armazenado em uma variável Ksh Unix

1

Estou com dificuldade em ler um arquivo armazenado em uma variável. deve ser simples, mas de alguma forma eu estou perdendo alguma coisa, não consigo descobrir o que?

count=0 
mip="$(<fila.txt)"
while read -r line
do
  count='expr $count + 1'
  echo "line $count "   
done < $mip

é um script simples e básico que conta o número de linhas, mas quando usei uma variável done < $ mip em vez do nome do arquivo feito < fila.txt . o script apenas exibe o conteúdo do arquivo como cat fila.txt em vez de contar as linhas.

line 1
line 2
line 3
line 4
line 5
line 6

alguma ideia ??

    
por Driven 20.02.2017 / 21:02

1 resposta

2

done <$mip ainda assume que $mip é um nome de arquivo. Não é.

O que você quer é provavelmente algo como

printf '%s\n' "$mip" |
while IFS= read -r line; do
   printf 'line %d\n' "$(( ++count ))"
done

A solução mais direta é

while IFS= read -r line; do
   printf 'line %d\n' "$(( ++count ))"
done <filea.txt

ou até mesmo

cat -n filea.txt | sed 's/^ *\([0-9]*\).*$/line /'

Esse último comando usará cat para enumerar as linhas no arquivo e sed para excluir o conteúdo real do arquivo.

Ou com awk , que é ainda mais simples:

awk '{ printf("line %d\n", NR) }' filea.txt

Ou, se você contar as linhas no arquivo primeiro:

count=$( sed -n '$=' filea.txt )    # or:  count=$( wc -l <filea.txt )
printf 'line %d\n' {1..$count}
    
por 20.02.2017 / 21:22

Tags