Chinaunix

标题: 如何高效率的生成包含指定字符的随机字符串? [打印本页]

作者: work4seo    时间: 2016-09-28 15:46
标题: 如何高效率的生成包含指定字符的随机字符串?
本帖最后由 work4seo 于 2016-09-28 15:48 编辑

现在想要生成包含a-z、H-X、-、0-9等字符的随机字符串,不一定要全部包含。
写了几个脚本,执行效率都不咋地,生成速度比较慢。

请问如何高效的生成?

目前的几段代码如下:
  1. #! /bin/bash
  2. function gencode(){
  3.         arr=(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z H I J K L M N O P Q R S T U V W X -);
  4.         len=${#arr[*]};
  5.         res="";
  6.         for((i=0; i<33; i++))
  7.         do
  8.                 time=`date +%s`;
  9.                 rannum=`echo $time$RANDOM + $RANDOM|bc`;
  10.                 pos=`echo $rannum % $len`;
  11.                 res=$res${arr[pos]};
  12.         done
  13.         echo $res
  14. }

  15. result=$(gencode 100 200)
  16. echo ${result}
复制代码
执行时间感人:
  1. real    0m3.682s
  2. user    0m0.840s
  3. sys     0m2.212s
复制代码


代码2:

  1. <blockquote>代码2不知道抽什么风,贴不上来
复制代码


执行时间还是不太OK
  1. real    0m2.611s
  2. user    0m0.570s
  3. sys     0m1.460s
复制代码



作者: vagrant_1220    时间: 2016-09-28 16:01
例如随机字符串长度20   
head -c 500 /dev/urandom | tr -dc a-z0-9A-Z- | head -c 20
作者: moperyblue    时间: 2016-09-28 16:03
本帖最后由 moperyblue 于 2016-09-28 17:46 编辑

time echo {a..z} {H..X} - {0..9}|xargs -n1|shuf|head -33|paste -sd ''
wl1t7RizIdba-uVg96eKpjUnW4horqL05

real    0m0.066s
user    0m0.015s
sys     0m0.025s

time echo {a..z} {H..X} - {0..9}|xargs -n1|shuf|head -33|paste -sd ''
wury29n4kMJeQ8fHxSVa1pUKt6i-osh7l

real    0m0.078s
user    0m0.030s
sys     0m0.042s
作者: 本友会机友会摄友会    时间: 2016-09-28 16:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: fh21_xuejinlian    时间: 2016-09-28 16:38
tr -dc _A-Z-a-z-0-9 </dev/urandom |head -c20
作者: jason680    时间: 2016-09-28 16:43
回复 1# work4seo

Would you like this ...

$ time awk 'BEGIN{srand();t=split("0123456789abcdefghijklmnopqrstuvwxyzHIJKLMNOPQRSTUVWX-",a,"");for(n=1;n<=34;++n)r=r a[int(rand()*t+1)];print r}'
KP5c5ycTlRalxxmPTSN4TRblj6QabgOMMV

real    0m0.055s
user    0m0.000s
sys    0m0.032s

$ time awk 'BEGIN{srand();t=split("0123456789abcdefghijklmnopqrstuvwxyzHIJKLMNOPQRSTUVWX-",a,"");for(n=1;n<=34;++n)r=r a[int(rand()*t+1)];print r}'
Jjwp1X13LJ0RRPsPpNeQO1gH6Jw2K6wrlg

real    0m0.057s
user    0m0.004s
sys    0m0.024s






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2