在shell脚本中从文件中读取随机行有什么简单的方法?
当前回答
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
其他回答
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
perlfaq5:我如何从文件中选择一个随机的行?下面是Camel Book上的一个油藏采样算法:
perl -e 'srand; rand($.) < 1 && ($line = $_) while <>; print $line;' file
与读取整个文件相比,这在空间上有很大的优势。你可以在Donald E. Knuth的《计算机编程艺术》第2卷第3.4.2节中找到这种方法的证明。
下面是一个简单的Python脚本,可以完成这项工作:
import random, sys
lines = open(sys.argv[1]).readlines()
print(lines[random.randrange(len(lines))])
用法:
python randline.py file_to_get_random_line_from
以下是我的发现,因为我的Mac OS不使用所有简单的答案。我使用jot命令来生成一个数字,因为$RANDOM变量解决方案在我的测试中似乎不是很随机。当测试我的解决方案时,我在输出中提供的解决方案中有很大的差异。
RANDOM1=`jot -r 1 1 235886`
#range of jot ( 1 235886 ) found from earlier wc -w /usr/share/dict/web2
echo $RANDOM1
head -n $RANDOM1 /usr/share/dict/web2 | tail -n 1
变量的回声是为了得到生成的随机数的视觉效果。
这很简单。
cat file.txt | shuf -n 1
当然,这只是比“shuf -n 1 file.txt”本身稍微慢一点。
推荐文章
- 如何从查找“类型d”中排除此/ current / dot文件夹
- 只使用md5sum获取哈希值(没有文件名)
- 使用sh shell比较字符串
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何创建Bash别名?
- 如何设置ssh超时时间?
- 将所有变量从一个shell脚本传递到另一个?
- 只列出UNIX中的目录
- 如何删除shell脚本中文件名的扩展名?
- 'find -exec'是Linux中的shell函数
- 如何在c++中生成一个随机数?
- 临时更改bash中的当前工作目录以运行命令
- 重定向复制的标准输出到日志文件从bash脚本本身
- Shell脚本for循环语法
- Docker入口点运行bash脚本被“拒绝权限”