Есть ли способ указать определенный диапазон чисел с помощью массива в скрипте? [closed]

Я пытаюсь добавить первые 20 чисел, которые я произвольно сгенерировал с помощью массива в моем скрипте. Возможно ли это?

Я использовал свой предыдущий сценарий для генерации 100 чисел и надеялся, что смогу использовать его и в этом сценарии. Теперь мне нужно добавить первые 20, используя массив. Могу ли я включить в свой сценарий функцию для решения этой проблемы?

Основной сценарий

MAXCOUNT=100
count=1

while [ "$count" -le $MAXCOUNT ]; do
number[$count]=$RANDOM
let "count += 1"
done

echo "${number[@]}
3
задан 2 December 2015 в 20:36

2 ответа

Добавить первые 20 чисел массива number:

echo "${number[@]:0:20}" | tr ' ' '+' | bc

Или

tr ' ' '+' <<<"${number[@]:0:20}" | bc
  • "${number[@]:1:20}" добирается, первые 20 элементов массива

  • tr ' ' '+' преобразовывает все пробелы в + так, чтобы мы могли использовать его в качестве входа к bc для получения дополнения, сделанного

3
ответ дан 1 December 2019 в 13:12

Я думаю, что Вы спрашиваете, как получить первые элементы 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'
6
ответ дан 1 December 2019 в 13:12

Другие вопросы по тегам:

Похожие вопросы: