awk之随机函数rand()和srand()
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()的更多相关文章
- awk之随机函数rand()和srand() (转)
转自:http://blog.chinaunix.net/uid-10540984-id-2942041.html 文件: 1234567 abcdefg ...... 现在想要随机抽取5列组成下 ...
- 随机函数rand()和srand()
C++中随机函数rand()和srand()的用法 一.rand() 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: ...
- 随机函数rand()与srand()
一.int rand(void); 函数所在的头文件是stdlib.h: 其内部实现线性同除法,不是真正的随机数.通常rand()%x是指在x范围内取模,返回值0-x; 系统默认随机种子是1: 二.v ...
- 认识随机函数rand()和srand(unsigned int )
rand函数 int rand( void ); 函数名: rand 功 能: 随机数发生器 用 法: int rand(void); 所在头文件: stdlib.h 函数说明 : ...
- 【转】随机函数的rand、srand用法
from:深海的小鱼儿 地址:http://www.cnblogs.com/xmphoenix/archive/2011/04/07/2008622.html 随机函数的rand.srand用法 一& ...
- rand和srand的用法
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include<stdlib.h> ...
- rand()和srand()
C++中rand() 函数的用法 1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数, ...
- rand()与srand()
1.不用srand()的话 两次运行程序产生的随机数序列相同 2.用srand() 两次运行程序产生的随机数则不同 示例程序: #include<iostream> #include< ...
- Mysql 随机函数 rand()
rand() 函数主要有两个用处: 1.是产生随机数, 2.是随机排序(在数据较大的时候会变成性能杀手) 实例: 1.产生一个随机数,默认0~1之间的浮点数 SELECT RAND( ) 2.参数指定 ...
随机推荐
- [CF735E/736C]Ostap and Tree
题目大意: 一个$n(n\le100)$个点的树,将一些点染成黑点,求满足每个点到最近黑点的距离$\le k(k\le\min(20,n-1))$的方案数. 思路: 树形DP. 用$f[i][j]$表 ...
- openresty总结
协程 1.例如当获取的数据没有前后依赖关系时,可以使用ngx.thread.spawn和ngx.thread.wait同时从数据库不同的库.表或者不同来源(mysql,redis等)获取数据. htt ...
- gnuplot加速比比较图
1)使用gnuplot画图代码如下: :] :] set xlabel "分片数" set ylabel "加速比" plot : w lp pt ps tit ...
- ios-真机调试出错信息
更新证书错误Code Sign error: Provisioning profile ‘XXXX'can't be found 在Xcode中当你在更新了你得证书 ...
- High Speed Inter-CHIP USB 2.0 PHY
转载:http://arasan.com/products/usb/usb-2-0/hsic-phy/ High Speed Inter-CHIP USB 2.0 PHY USB is the ubi ...
- Coherence代理节点在离开集群时的恢复
Coherence的架构参考 在极端压力之下,有时候代理节点会忙于处理请求而不响应其他的心跳,同步,导致其他节点传输的报文没有回应,而被认为是离开集群,从而影响业务. 写了一段代码,能让进程在监听到有 ...
- lykops运维自动化
lykops lykops是一套web可视化的运维自动化项目,基于python3+django开发的. 已实现功能 1.用户管理 详情 2.主机管理 主要功能:收录主机,为其他模块(例如:执行任务)直 ...
- Python中调用其他程序的方式
前言 在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程, 可以使用win32 ...
- ARP协议具体解释之ARP动态与静态条目的生命周期
ARP协议详细解释之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自己主动加入和删除. q 每一个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉 ...
- Kubernetes用户指南(四)--应用检查和调试
一.调试 当你的应用开始运行,那么DEBUG是不可避免的问题. 早些时候,我们在描述的是如何通过kubectl get pods来获得Pod的简单状态信息. 但是现在,这里有更多的方式来获得关于你的应 ...