在shell脚本中从文件中读取随机行有什么简单的方法?
当前回答
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
其他回答
另一种使用awk的方法
awk NR==$((${RANDOM} % `wc -l < file.name` + 1)) file.name
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
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
使用bash脚本:
#!/bin/bash
# replace with file to read
FILE=tmp.txt
# count number of lines
NUM=$(wc - l < ${FILE})
# generate random number in range 0-NUM
let X=${RANDOM} % ${NUM} + 1
# extract X-th line
sed -n ${X}p ${FILE}