小智 366
你可以使用shuf:
shuf -n 1 $FILE
Run Code Online (Sandbox Code Playgroud)
还有一个叫做的工具rl.在Debian中,它在randomize-lines包中完全符合您的要求,但并非在所有发行版中都可用.在它的主页上,它实际上建议使用shuf替代(我相信它在创建时不存在). shuf是GNU coreutils的一部分,rl不是.
rl -c 1 $FILE
Run Code Online (Sandbox Code Playgroud)
Pol*_*ker 73
另一种选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
Run Code Online (Sandbox Code Playgroud)
Tho*_*ele 65
sort --random-sort $FILE | head -n 1
Run Code Online (Sandbox Code Playgroud)
(我喜欢上面的shuf方法甚至更好 - 我甚至不知道存在,我自己也没有找到这个工具)
Yok*_*kai 31
这很简单.
cat file.txt | shuf -n 1
Run Code Online (Sandbox Code Playgroud)
当然,这比它自己的"shuf -n 1 file.txt"要慢一点.
Tra*_*er1 16
perlfaq5:如何从文件中选择随机行?以下是Camel Book中的油藏采样算法:
perl -e 'srand; rand($.) < 1 && ($line = $_) while <>; print $line;' file
Run Code Online (Sandbox Code Playgroud)
这在读取整个文件的空间方面具有显着的优势.您可以在Donald E. Knuth的"计算机编程艺术"第2卷第3.4.2节中找到这种方法的证明.
Pao*_*sco 11
使用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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98074 次 |
| 最近记录: |