creación de matrices a partir de la salida de la ecuación

creación de matrices a partir de la salida de la ecuación

Por ejemplo, quiero dividir todos los números enteros del 1 al 5 entre 8 y ponerlos en una matriz. Estaba pensando en algo similar al código siguiente, pero estoy seguro de que está incorrecto y sucio:

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

¿Hay alguna forma de hacer esto limpiamente si mi código es correcto?

Respuesta1

El seqcomando puede incrementarse en un punto flotante:

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

Puedes obtener el incremento conecho 'scale=1;(5-1)/8'|bc

Respuesta2

Sí, pero como bash no realiza aritmética de punto flotante, necesitarás usar otra herramienta y guardar su resultado en la matriz de bash. Por ejemplo:

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

Guardar en una matriz con:

array=( $(perl -le 'print $_/8 for 1..5') )

Respuesta3

bashSólo puedo hacer aritmética de números enteros. Uso bcpara flotadores:

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[@]}"

información relacionada