[英]How can I generate random files with size 1mb each from 1-500 using linux shell script
[英]How do I generate random numbers in 3 lines - Linux Shell Script
我想編寫一個代碼,該代碼可以生成3行,每行6個隨機數,間隔6個隨機數,在給定時間(0.5秒)后會隨機播放,並且不會創建新行,基本上6個隨機數會在3行中繼續生成。 到目前為止,我的代碼是:
echo " "
echo " "
echo " "
for i in {1..5};
do
for i in {1..1};
do
echo -ne " $(($RANDOM % 100)) $(($RANDOM % 100)) $(($RANDOM % 100)) $(($RANDOM % 100)) $(($RANDOM % 100)) $(($RANDOM % 100))\r"
done
sleep 0.5
done
但是,當我嘗試將第二行和第三行添加到此行時,它似乎無法按照我想要的方式工作。 輸出示例如下:
45 88 85 90 44 22
90 56 34 55 32 45
58 99 42 10 48 98
在這些數字之間,將生成新的數字,僅保留6列和3行。 我也嘗試過制作矩陣,但是對我來說不起作用。
我建議您避免為此使用外殼程序。 Shell非常適合於自動執行系統管理任務-例如與文件,目錄,Shell命令進行交互-但也可以使人們遠離學習“真正的”和最強大的編程語言。
python,ruby或perl可以幫助您。
如果您只有錘子,那么一切看起來都像釘子。
例如紅寶石
def print_random_numbers(num)
random_numbers = []
num.times do |n|
random_numbers << rand(100)
end
puts random_numbers.join(' ')
puts
end
while true
3.times do
print_random_numbers(6)
end
sleep 0.5
end
我不確定我是否真的了解您的問題,但是:
這使您從1-100的范圍內隨機抽取6個數字
numbers=$(shuf -i 1-100 -n 6)
echo $numbers
選擇的數字沒有重復。 如果要重復,請使用-r。
這使您可以對之前繪制的數字進行排列:
echo $numbers | tr ' ' '\n' | shuf | xargs echo
我不知道您是否已完成,但是從注釋繼續,我將使用1-100
之間的隨機值填充索引數組,例如
#!/bin/bash
for ((i = 0; i < 18; i++)); do ## fill array with random values
a[i]=$(($RANDOM % 100 + 1))
done
然后,您想要的是一個可以調用的函數,在每行中傳遞值的數量(以便您可以在打印完這些數字后輸出'\\n'
),然后將數組值作為該函數的參數讀入本地函數內的數組(當然,您可以使用原始數組而不必擔心將元素作為參數傳遞,但是我更喜歡在函數內使用local
值來保持其他范圍內的值不變。為此,您的打印函數可能類似於:
## function to print array in shuffled order, using tput for cursor control
prnarray() {
local n=$1
local al=( ${@:2} )
local c=0
for i in $(shuf -i 0-$((${#al[@]} - 1))); do
[ "$c" -gt '0' -a $((c % n)) -eq '0' ] && printf "\n"
printf " %3d" "${al[i]}"
((c++))
done
printf "\n"
tput cuu 6 ## tput is used for cursor control to move back to top
}
然后,您實際上不需要太多其他步驟就可以循環打印陣列, sleep
一段時間,然后再次調用prnarray
來用新的shuffle覆蓋輸出。 例如
tput sc ## save cursor position
## call prnarray 3 times with 5 sec. delay between displays
declare -i c=0
while (( c < 3 )); do
prnarray 3 ${a[@]}
((c++))
sleep 5
done
tput rc ## restore cursor position
使用/輸出示例
陣列將每5秒鍾在相同的位置打印一次,其中相同的元素將隨機排列到陣列中的不同位置。
$ sh randomshuf.sh
33 30 34
86 98 48
94 89 80
50 57 34
11 45 57
80 42 22
試一試,如果您有任何疑問,請告訴我。
注意:使其3x6
更改行:
tput cuu 3
和
prnarray 6 ${a[@]}
更改這些內容后,您的輸出將類似於:
$ sh randomshuf.sh
85 9 45 14 18 16
6 59 43 19 29 58
7 89 18 72 29 29
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.