criação de matriz a partir da saída de equação

0

Eu quero, por exemplo, dividir todos os inteiros de 1 a 5 por 8 e colocá-los em uma matriz. Eu estava pensando em algo parecido com o código abaixo, mas tenho certeza de que está errado e sujo:

 COUNTER=0
 until [  $COUNTER -lt 8 ]; do
        ${steps[$COUNTER]}=1+(5-1)/8*$COUNTER
        let COUNTER+=1
 done

Existe alguma maneira de fazer isso de forma limpa se meu código estiver correto?

    
por Raymond Ghaffarian Shirazi 07.10.2015 / 13:18

3 respostas

1

bash só pode fazer aritmética inteira. Use bc para floats:

from=1
to=5
steps=8
for c in $(seq 0 $steps) ; do
    ar[c]=$(echo $(bc -l <<< "$from + ($to - $from) / $steps * $c"))
done
echo "${ar[@]}"
    
por choroba 07.10.2015 / 13:30
2

O comando seq pode ser incrementado por um float:

declare -a steps=($(seq 1 .5 5))

Você pode obter o incremento com echo 'scale=1;(5-1)/8'|bc

    
por meuh 07.10.2015 / 14:04
2

Sim, mas como o bash não faz aritmética de ponto flutuante, você precisará usar outra ferramenta e salvar sua saída na matriz bash. Por exemplo:

$ perl -le 'print $_/8 for 1..5' 
0.125
0.25
0.375
0.5
0.625

Salvar em uma matriz com:

array=( $(perl -le 'print $_/8 for 1..5') )
    
por terdon 07.10.2015 / 15:27