有时因为测试需要,要在数据库中模拟大量的数据,而这些数据都有一定的规律,比如现在有一个包含200个用户昵称的数据文件,要将这些昵称导入到用户表中,用户表的属性有姓名、昵称、性别、年龄、用户类型等等,姓名必须是字母和数字组成的,而年龄只能取值0、1、2,分别代表女、男、保密,而年龄需要在18~35岁之间,用户类型只能取两个值(普通,高级),如何模拟出这样一些数据呢,使用shuf命令可以轻松搞定。方法如下:
一.准备数据文件
1.性别数据文件:sex.list
0
1
2
2.年龄数据文件:age.list
18
19
20
……
……
35
3.用户类型数据文件:type.list
普通
高级
4.用户名称数据文件:asciitab.list
0
1
2
……
……
9
a
b
……
……
z
A
B
……
……
Z
5.昵称文件内容如下:alais.list
天空
昭昭
多多
……
……
坏孩子
先进分子
二.编写生产数据脚本
新建一个脚步文件:makeUserData.sh,内容如下:
cat alais.list |
while read line
do
username=`shuf -n 1 asciitab.list``shuf -n 1 asciitab.list``shuf -n 1 asciitab.list``shuf -n 1 asciitab.list``shuf -n 1 asciitab.list``shuf -n 1 asciitab.list`
sex=`shuf -n 1 sex.list`
age=`shuf -n 1 age.list`
type=`shuf -n 1 type.list`
echo $username##$line##$sex##$age##$type
done
说明:
1.shuf -n 1 asciitab.list 的含义是从asciitab.list 文件中随机取出一行数据,如果是-n 2就是取出两行数据
2.username就是由六位字母或数字组成
3.cat alais.list |while read line:读取alais.list的每一行数据,并将该行数据保存在line中,echo $username##$line##$sex##$age##$type,就用到了这个变量
三.运行脚本
sh makeUserData.sh > userData.list
生成的userData.list内容如下:
a2Srtc##昭昭##1##34##普通
bHGtrs##坏孩子##2##19##高级
…………………………
…………………………
98Dyte##天空##1##24##普通
四.数据入库
这部分就随意吧,喜欢使用什么方式都可以,基本思想就是解析文件并入库。
补充说明:
这个帖子发了有一段时间了,最近才发现,原来好多linux版本在安装时不会安装shuf命令,我在网上查了一下,未发现有关安装这个命令的资料,同时通过linux自动查找也没有找到,比较奇怪啊。
我当初使用的cygwin,一个在windows上模拟linux的工具,选择的是完全安装,shuf也就装上了。
这里给出一个没有shuf命令的解决办法,就是写一个随机读取一行文件的小命令,如下:
perl -e 'srand;' /
-e 'rand($.) < 1 && ($it = $_) while <>;' /
-e 'print $it' $1
这里使用了perl命令,一般来说,perl命令是都会默认安装的。
将以上脚本保存在文件shuf.sh中,将以上用到shuf -n 1的地方修改为sh shuf.sh即可。