使用Shell脚本生成随机单词

最近需要一些随机的单词,或字符串用于测试。生成随机的字符串的方法有很多种,那如何生成一些随机的单词了?
在Linux系统中自带了一个词典文件,其中存储了大量的单词,借助这个词典文件和随机数可以生成任意的随机单词。Linux中的这个词典文件位于/usr/share/dict/目录下,这些单词每个占一行。现在目标已经很明确了,只要生成任意随机数,然后读取这个单词就可以了。sed可以读取一个文件的指定行,例如 sed -n 10p filename可以读取filename这个文件的第10行。
至于随机数可以使用 RANDON RANDON所获得的随机数范围为[0, 32767],而我们的字典文件中共有479623个单词。打开词典文件,可以发现单词是按字典序排列的,而且单词排列的很密,存在很多“相似度”很高的单词,实际也没有要求随机性那么良好的随机数。因此将随机数乘以一个常数后对单词总数取余,这里常数选用一个质数(为什么是质数?质数很有很多神奇的地方。脚本中使用37,主要想 RANDOM0479623,C/C++shell RANDOM范围大的多,但是用C/C++方式的实现要比shell来的麻烦一些)

#!/bin/bash 
#randomWords.sh 
#词典文件所在路径
filepath=/usr/share/dict/words
#生成的结果文件
resultFile=./result.txt
#词典文件中总共有多少个单词
totalWordsNum=`wc -l $filepath | awk '{print $1}'`

idx=1
#NUM为要生成的随机单词的个数
NUM=100
declare -i num
declare -i randNum
ratio=37

while [ "$idx" -le "$NUM" ]
do
    a=$RANDOM
    num=$(( $a*$ratio ))
    randNum=`expr $num%$totalWordsNum` 

    echo $randNum
    sed -n "$randNum"p $filepath >> $resultFile
    idx=`expr $idx + 1`
done

另外发现如果你的文本编辑器默认以windows风格的换行,在调试时,会报语法错
‘syntax error near unexpected token `’
这是因为在windows环境下换行默认是 \r\n,Linux环境则是\n,需要进行转换,在Linux环境中可以用dos2unix来转换。在Windows环境中可以借助Notepad++来转换
方法是菜单项编辑->文档格式转换->转换为Unix格式;使用sublime的话,暂未找到默认设置的为Unix格式的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值