awk之随机函数rand()和srand()
分类: LINUX 文件: abcdefg
...... 现在想要随机抽取5列组成下面的内容,允许重复: cffab
...... awk -F '' 'BEGIN{srand();for(i=1;i<=5;i++)a[i]=int(rand()*100%7+1)}{for(i=1;i<=5;i++)printf $a[i];printf RS}' file
[解析]
思路是首先把FS设置为空,随机抽取5列,那么在BEGIN模块定义数组a中1~5的下标对应随机的1~7的值,在读行时把数组a的值(这是个1~7的随机值)作为字段打印出来,这样就实现了随机抽取7个字段中的5个字段重新组成新的行。
rand()函数是随机产生一个0到1之间的保留小数点后6位的小数值,例如0.,所以需要乘以100得到21.,然后再对7取余,结果是0.,int()取整是0了,我们要获得1~7的随机数,所以加1,整个表达式才是 int(rand()*%+) ,其实 int(length*rand()+) 也是可以得到1~7的随机数的,只是在BEGIN中,length函数还是为0,这样就得到了肯定产生于1~7之间的随机数,问题在于rand()只产生一次,怎么让它滚动起来呢?这里我们还需要srand()函数,括号内没有表达式的话,它会采用当前时间作为随机计数器的种子,这样以秒为间隔,随机数就能滚动随机生成了。最后再对应数组a的随机值作为字段打印出来。 #!/bin/bash
len=""
while read line; do
str=""
while [ "${#str}" -lt "$len" ]; do
letter="${line:$(($RANDOM%${#line})):1}"
str="$str$letter"
done
echo $str
done < file
[解析]
同样,这个shell脚本也能实现该功能,首先定义变量 len= ,因为只需要5列嘛。然后从file文件中读入一行内容给变量 line ,定义一个长度为0的变量 str ,当 str 变量长度大于等于5了,就不再会继续whlie循环,然后打印该变量,在bash中 ${#var} 就是获取变量的长度,我们再看看怎么实现的随机,该shell的原理是读取 line 变量的随机0~6位置长度为1的字符,环境变量RANDOM,范围是0~,RANDOM对7取余的结果是0~,就能随机抽取长度为7的字符串中的任意一个字符,然后把该字符累计给变量 str ,满足长度5后就打印出该行。 谢谢Tim和shell_HAT的精彩代码。
 

awk之随机函数rand()和srand()的更多相关文章

  1. awk之随机函数rand()和srand() (转)

    转自:http://blog.chinaunix.net/uid-10540984-id-2942041.html 文件: 1234567 abcdefg ......   现在想要随机抽取5列组成下 ...

  2. 随机函数rand()和srand()

    C++中随机函数rand()和srand()的用法 一.rand() 函数名:   rand     功   能:   随机数发生器   用   法:   int rand(void); 所在头文件: ...

  3. 随机函数rand()与srand()

    一.int rand(void); 函数所在的头文件是stdlib.h: 其内部实现线性同除法,不是真正的随机数.通常rand()%x是指在x范围内取模,返回值0-x; 系统默认随机种子是1: 二.v ...

  4. 认识随机函数rand()和srand(unsigned int )

    rand函数 int rand( void ); 函数名:   rand 功   能:   随机数发生器 用   法:   int rand(void); 所在头文件: stdlib.h 函数说明 : ...

  5. 【转】随机函数的rand、srand用法

    from:深海的小鱼儿 地址:http://www.cnblogs.com/xmphoenix/archive/2011/04/07/2008622.html 随机函数的rand.srand用法 一& ...

  6. rand和srand的用法

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include<stdlib.h> ...

  7. rand()和srand()

    C++中rand() 函数的用法 1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数, ...

  8. rand()与srand()

    1.不用srand()的话 两次运行程序产生的随机数序列相同 2.用srand() 两次运行程序产生的随机数则不同 示例程序: #include<iostream> #include< ...

  9. Mysql 随机函数 rand()

    rand() 函数主要有两个用处: 1.是产生随机数, 2.是随机排序(在数据较大的时候会变成性能杀手) 实例: 1.产生一个随机数,默认0~1之间的浮点数 SELECT RAND( ) 2.参数指定 ...

随机推荐

  1. 【OpenJudge9272】【DP】偶数个数字3

    偶数个数字3 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] 在所有的N位数中,有多少个数中有偶数个数字3? [输入] 一行给出数字N,N&l ...

  2. [置顶] Windows显示驱动(WDDM)编程初步(2)

    欢迎转载[作者:张佩][原文:http://www.yiiyee.cn/Blog/wddm2/] 第二部分专门只讲VIDPN.这是后面内容的基础.WDDM框架用VIDPN这个概念,来描述它所要处理的显 ...

  3. js之对象(经典)

    一.对象的定义: 对象是JavaScript的一个基本数据类型,是一种复合值,它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值.即属性的无序集合. 二.对象的创建(多种方法) 1.对象 ...

  4. 使用原生JS进行字符串转对象

    字符串转对象 目的 工作中如果需要原生 JS 完成字符转对象的话可以通过 JSON.parse(str), 但是这个方法是ES5中才出现, 如果需要兼容低版本就需要其它方法 使用原生 JS 解决字符串 ...

  5. xargs: How To Control and Use Command Line Arguments

    参考: http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/ http://linux ...

  6. 【java】乱码处理+编码转化+判断字符串编码方式

    之前有一篇是修改IDE的编码,服务器的编码等处理乱码,但是在所有环境因素上,保证了编码方式之后,也会有前台传递给后台[get方式提交]传递给后台的编码方式是非UTF-8的,也会有例如FTP服务器的编码 ...

  7. ORA-12537:TNS:连接关闭 -------数据库最大连接数问题

    问题: 我自己用PLSQL登录实验,我也登陆不了,可是让同事实验,他一会能够登录,一会不能够登录.应用还是能够正常访问,只是PLSQL登录异常. 分析: 基于这种情况去百度,有的说是配置文件有问题,有 ...

  8. 可用性的维度(5E)

    可用性的维度 当我检查可用性文献时,我发现可用软件包含如用户友好.易学.可发现性.质量.有用的和阻止错误.在可用性工程中, Jakob Nielsen给出一个产品的五个属性:易学性.效率.可记忆性.容 ...

  9. ThreadPoolExecutor 的三种提交任务方式

    学习内容: ExecutorService线程池的应用... 1.如何创建线程池... 2.调用线程池的方法,获取线程执行完毕后的结果... 3.关闭线程...   首先我们先了解一下到底什么是线程池 ...

  10. iOS:创建静态库及其使用

    本篇来自转载,原创链接为:http://my.oschina.net/leejan97/blog/284193 摘要: 静态库文件可以有效的将功能封装和细节隐藏  ios 静态库 static lib ...