Я пытаюсь написать awk-скрипт, который генерирует 3 натуральных числа, которые суммируются до 60. Я пытаюсь использовать функцию rand, но у меня проблема с суммой до 60Как сгенерировать 3 натуральных числа, которые составляют 60, используя awk
0
A
ответ
0
Вот один из способов:
awk -v n=60 'BEGIN{srand();a=int(rand()*n);b=int(rand()*(n-a));c=n-a-b;
print a,b,c}'
Идея:
- генерируют случайное число
a
:0=<a<60
- генерируют ра ndom номер
b
:0=<b<60-a
c=60-a-b
здесь, я установил переменную n=60
, чтобы сделать это легко, если у вас есть другая сумма.
Если запустить этот один вкладыш 10 раз, мы получаем выход:
kent$ awk 'BEGIN{srand();for(i=1;i<=10;i++){a=int(rand()*60);b=int(rand()*(60-a));c=60-a-b;print a,b,c}}'
46 7 7
56 1 3
26 15 19
14 12 34
44 6 10
1 36 23
32 1 27
41 0 19
55 1 4
54 1 5
генерации случайных чисел 2 и вычислить 3-й один, как (60 - номер1 - number2) –
@Lashane RAND() генерирует с плавающей точкой, так что это может быть проблемой. Tomasz, вы можете сгенерировать 3 случайных поплавков, делить все на их сумму и умножить на 60, вы получите 3 числа, которые суммируются до 60. Затем округлите их (проверьте вверх/вниз, чтобы компенсировать) – hyst329