
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 seq
comando 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
bash
Sólo puedo hacer aritmética de números enteros. Uso bc
para 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[@]}"