免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4323 | 回复: 11
打印 上一主题 下一主题

awk rand() 问题求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-30 13:26 |只看该作者 |倒序浏览
       现在有个文本 比如说1000 个记录, 每个记录里面都是字母, 像

      ABCDEFGGHJFDFDJJJKKKKKKKJHGDF    记录1
        GEGGGGGGGGGGGDFDGHJJJJJJJJ          记录2
        。。。。                                   。
     。。。                                      。
      。。。                                      1000


           我想用rand() 随机得到一个整数,然后从每一个记录里取5个连续的字母(从rand()得到的整数开始), 但是这个整数不能是0, length 和length-10, 请问各位高手怎么解决?

          我的想法是 while(s=int(rand()*10000%length) != 0 | (length-10)) {...}

              但是上面这个while循环里面有问题,,, 无法运行,,,还请高手说说rand()的具体用法,,, 个人小白,,,谢谢咯。,,                              

论坛徽章:
0
2 [报告]
发表于 2012-05-30 13:30 |只看该作者
s != 0 | (length-10)

这是个什么语法??

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2012-05-30 13:38 |只看该作者
hz164 发表于 2012-05-30 13:26
现在有个文本 比如说1000 个记录, 每个记录里面都是字母, 像

      ABCDEFGGHJFDFDJJJKKKKKKKJ ...
length是什么?rand()之前需要设置一下srand(),才可以的。

论坛徽章:
0
4 [报告]
发表于 2012-05-30 14:45 |只看该作者
回复 2# mpstat


我自己想出来的 但是不对 ,希望有人能帮忙修改下 或者告诉我怎么弄..   

论坛徽章:
0
5 [报告]
发表于 2012-05-30 14:47 |只看该作者
回复 3# L_kernel

length 是length($0) ... 我是小白 自己想出来的,,, 如果你有什么办法 麻烦指教给我 谢谢

   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-05-30 20:50 |只看该作者
hz164 发表于 2012-05-30 14:47
回复 3# L_kernel

length 是length($0) ... 我是小白 自己想出来的,,, 如果你有什么办法 麻烦指教给 ...
  1. $ cat file.txt
  2. ABCDEFGGHJFDFDJJJKKKKKKKJHGDF   记录1
  3. GEGGGGGGGGGGGDFDGHJJJJJJJJ      记录2
  4. $ awk 'BEGIN{srand(systime())}{for(;;){num=int(rand()*10);if(num>1 && num!=length($1) && num!=length($1)-1)break;}print substr($1,num,5)}' file.txt
  5. DEFGG
  6. GGGGG
复制代码
这样子吧,得到的随机数的起始位置1-9,没有考虑大于10的。

论坛徽章:
0
7 [报告]
发表于 2012-05-31 14:50 |只看该作者

回复 6# L_kernel

你好,谢谢你的回答,但是请问for 里面是什么设置?

      还有,我需要的是所选的数字不能是每个记录长度减10, 比方说,第一个记录长100 那就不能随机的90,然后需要为这个记录重新随机,,,

      初学者 ,有点头大。。。
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2012-05-31 14:52 |只看该作者
hz164 发表于 2012-05-31 14:50
回复 6# L_kernel

你好,谢谢你的回答,但是请问for 里面是什么设置?
for(;里面就是为了得到满足条件的随机数。for里面的那个if的条件判断,如果满足,就break掉。

然后进行后续的处理。

论坛徽章:
0
9 [报告]
发表于 2012-05-31 16:18 |只看该作者
回复 8# L_kernel
for(;;)里面不需要设置条件么? 比方说i=1;i>10;i++ 之类的。。。谢谢哦

   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2012-05-31 17:37 |只看该作者
本帖最后由 L_kernel 于 2012-05-31 17:38 编辑
hz164 发表于 2012-05-31 16:18
回复 8# L_kernel
for(;;)里面不需要设置条件么? 比方说i=1;i>10;i++ 之类的。。。谢谢哦
不需要。一直循环,直到if那里判断得到结果。然后就跳出循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP