免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7543 | 回复: 15

[数值计算] shell如何自动生成一些数字和字母 [复制链接]

论坛徽章:
0
发表于 2014-05-24 11:48 |显示全部楼层

1、  执行一个shell 后,得到如下结果,就是第二列自动增长,第二列都是书架  如
  
shell  auto.sh 7

201401|13910001|2
201401|13910002|2
201401|13910003|2
201401|13910003|2
201401|13910004|2
201401|13910005|2
201401|13910006|2
201401|13910007|2

2、 第二列都是字母,但不重复, shell  auto.sh 5   结果如下

201401|abca|2
201401|abcb|2
201401|abcc|2
201401|abcd|2
201401|abce|2

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
发表于 2014-05-24 12:09 |显示全部楼层
Bash的echo和for就可以搞掂了,再不行printf

论坛徽章:
0
发表于 2014-05-24 14:40 |显示全部楼层
回复 2# expert1


    具体怎么写啊?

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
发表于 2014-05-24 18:08 |显示全部楼层
还有个方法就是借助split
比如file是100MB的,你想建立100个目录,就可以通过split把它分割成1mb,不会i改写源文件的。这样:
  1. split -d -b 1m file
复制代码
这样就生成了你想要的“数字目录”文件,不过你要把它变成目录
  1. split  -b 1m file
复制代码
这样就生成了你想要的“字母目录”文件,不过你要把它变成目录
关于怎么把文件变成目录的问题,可以用for

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-05-24 19:58 |显示全部楼层
回复 1# wzl189189


   

1
  1. cat auto.sh
  2. #!/bin/bash
  3. eval echo "201401\|1391000{1..$1}\|2" |xargs -n1
复制代码
2
  1. cat auto.sh
  2. #!/bin/bash
  3. eval echo `echo -e "201401\|abc{\0141..\0$[141+$1-1]}\|2"` |xargs -n1
复制代码

论坛徽章:
0
发表于 2014-05-25 00:41 |显示全部楼层
回复 5# 关阴月飞

   谢谢啊,真是高手啊,
  真是不好意思,我上面的举例有问题

  第一个问题,就是第二列想生成139开头的手机号码,我举例的时候没有写好,比如如下,由于太多数字都差不多,所以省略号是表示,

201401|13900000001|2
201401|13900000002|2
201401|13900000003|2
  ........
201401|13900000010|2
........

201401|13900001000|2
.......
201401|13999999999|2

你第二个脚本有问题,当值填写9时,就不对了,是我错了,我没有描述清楚, 我的想法就是在第二列
想制造一个不重复的字母的组合,即每一行的第二列与其他行的列值都不一样

201401|aklbca|2
201401|ikeddd|2
  ......

  希望高手再帮忙看看,这个怎么完善下

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-05-25 13:33 |显示全部楼层
回复 6# wzl189189

1.生成13900000000之类的号码,你改一下就行
  1. cat auto.sh
  2. #!/bin/bash
  3. eval echo "201401\|139{00000001..$1}\|2" |xargs -n1
复制代码
2.只能再目测一下:生成N行,N位的随机数:
  1. [root@master awktest]# ./auto.sh 5
  2. 201401|fuoxo|2
  3. 201401|pldxt|2
  4. 201401|vvvuo|2
  5. 201401|yyvvr|2
  6. 201401|naodx|2
  7. [root@master awktest]# ./auto.sh 7
  8. 201401|dmmvfsh|2
  9. 201401|kdcnzzg|2
  10. 201401|stxcxml|2
  11. 201401|wcgytpx|2
  12. 201401|pthnlyo|2
  13. 201401|xnpovii|2
  14. 201401|ceoknzw|2
  15. [root@master awktest]# ./auto.sh 9
  16. 201401|yaiybarcm|2
  17. 201401|yrcivtilw|2
  18. 201401|xsckxvsvb|2
  19. 201401|syywctuix|2
  20. 201401|nsskyhryl|2
  21. 201401|zfchuzraz|2
  22. 201401|bgjrwjcwn|2
  23. 201401|aqygmtesw|2
  24. 201401|ptukkicxw|2
  25. [root@master awktest]# cat auto.sh
  26. #!/bin/bash
  27. for i in `seq $1`
  28. do
  29. echo "201401|`tr -dc a-z < /dev/urandom |head -c$1`|2"
  30. done
复制代码

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
发表于 2014-05-25 21:58 |显示全部楼层
本帖最后由 tgwz88 于 2014-05-25 22:14 编辑

回复 6# wzl189189
  1. for x in ` seq -w 99999999`  ; do echo "201401|139"$x"|2" ;done
复制代码
  1. while true; do echo $RANDOM >num; base64 num |sed ' s/[^[:alpha:]]//g ' ; done
复制代码

论坛徽章:
2
狮子座
日期:2014-05-30 21:43:03巳蛇
日期:2014-05-30 21:46:14
发表于 2014-05-26 16:45 |显示全部楼层
本帖最后由 tgwz88 于 2014-05-26 16:54 编辑

  1. #! /bin/bash
  2. for (( x=0;x<$1;x++ ))
  3. do
  4. echo "201401|"$(sha1sum<<<$RANDOM|cut -b 5-10)"|2"
  5. done
复制代码

论坛徽章:
0
发表于 2014-05-26 23:55 |显示全部楼层
回复 9# tgwz88
  高手啊,谢谢啦,这个写的我都看不懂,能不能解释下,我们也好学习下


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP