我已经编写了以下随机数生成器shell脚本:
我会这样运行它:
对于少量的行,它运行得很好,但是对于10亿行数据,我遇到了以下OOM错误:
for i in $(seq 1 $1) #for as many times, as the first argument ($1) defines...
do
echo "$i $((RANDOM%$2))" #print the current iteration number and a random number in [0, $2)
done
我会这样运行它:
./generator.sh 1000000000 101 > data.txt
生成1B行id和一个在[0,100]范围内的随机数,并将这些数据存储在文件data.txt
中。
我想要的输出结果是:
1 39
2 95
3 61
4 27
5 85
6 44
7 49
8 75
9 52
10 66
...
对于少量的行,它运行得很好,但是对于10亿行数据,我遇到了以下OOM错误:
我的程序哪部分造成了这个错误?如何逐行写入./generator.sh: xrealloc: ../bash/subst.c:5179: cannot allocate 18446744071562067968 bytes (4299137024 bytes allocated)
data.txt
文件呢?
我尝试用以下代码替换了 echo
行:echo "$i $((RANDOM%$2))" >> $3
$3是data.txt
,但我看不出有什么区别。
seq 1000000000
表示 10e9,意思是很大。我执行了seq 1000000000 > file
命令,在我停止之前文件已经达到 5G 大小。 - fedorquibash
中的OOM...对吧? - anishsane$(...)
并将其保存在内存中。在评估完成之后,它才形成实际命令for ...
部分的命令行。但在第一步完成之前,它收到了OOM错误。 - anishsane