Я пытаюсь добавить первые 20 чисел, которые я произвольно сгенерировал с помощью массива в моем скрипте. Возможно ли это?
Я использовал свой предыдущий сценарий для генерации 100 чисел и надеялся, что смогу использовать его и в этом сценарии. Теперь мне нужно добавить первые 20, используя массив. Могу ли я включить в свой сценарий функцию для решения этой проблемы?
MAXCOUNT=100
count=1
while [ "$count" -le $MAXCOUNT ]; do
number[$count]=$RANDOM
let "count += 1"
done
echo "${number[@]}
Добавить первые 20 чисел массива number
:
echo "${number[@]:0:20}" | tr ' ' '+' | bc
Или
tr ' ' '+' <<<"${number[@]:0:20}" | bc
"${number[@]:1:20}"
добирается, первые 20 элементов массива
tr ' ' '+'
преобразовывает все пробелы в +
так, чтобы мы могли использовать его в качестве входа к bc
для получения дополнения, сделанного
Я думаю, что Вы спрашиваете, как получить первые элементы N массива удара. Если так, это должно работать:
$ array=( $(seq 1 30 ) )
$ echo ${array[@]}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
$ echo ${array[@]:0:20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Общий формат ${array[@]:START:LENGTH}
. Это возвратит ДЛИНУ следующие элементы массива, начинающего с ЗАПУСКА.
Так, для добавления первых 20 Вы могли сделать (обратите внимание, что я запускаю от 0, не 1, так как массивы начинаются в 0. Я предлагаю, чтобы Вы исправили свой сценарий и установили count=0
вначале вместо count=1
; если Вы не хотите, изменяться 0
ниже к a 1
):
for i in ${number[@]:0:20}; do
sum=$((sum + i))
done
echo $sum
С другой стороны, Вы могли просто выполнить итерации по первым 20 элементам массива:
for((i=0;i<20;i++))
do
sum=$(( sum + number[$i] ))
done
echo "$sum"
Оба метода предполагают добавление целых чисел. Bash не имеет дело с числами с плавающей точкой, таким образом, они повредятся, при попытке добавить части. Если это - проблема, используйте умный прием @hemayl или любую другую программу, которая может сделать математику. Например:
echo "${number[@]:0:20}" | perl -lane '$k+=$_ for @F; print $k'