在shell脚本中从文件中读取随机行有什么简单的方法?


当前回答

你可以使用shuf:

shuf -n 1 $FILE

还有一个实用程序叫做rl。在Debian中,它是在随机行包中,尽管不是在所有发行版中都可用,但它确实是你想要的。在它的主页上,它实际上推荐使用shuf(我相信它创建时还不存在)。shuf是GNU coreutils的一部分,rl不是。

rl -c 1 $FILE

其他回答

使用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}

另一种使用awk的方法

awk NR==$((${RANDOM} % `wc -l < file.name` + 1)) file.name

这很简单。

cat file.txt | shuf -n 1

当然,这只是比“shuf -n 1 file.txt”本身稍微慢一点。

另一个选择:

head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1

下面是一个简单的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