在shell脚本中从文件中读取随机行有什么简单的方法?
当前回答
以下是我的发现,因为我的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”本身稍微慢一点。
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
你可以使用shuf:
shuf -n 1 $FILE
还有一个实用程序叫做rl。在Debian中,它是在随机行包中,尽管不是在所有发行版中都可用,但它确实是你想要的。在它的主页上,它实际上推荐使用shuf(我相信它创建时还不存在)。shuf是GNU coreutils的一部分,rl不是。
rl -c 1 $FILE
单个bash行:
sed -n $((1+$RANDOM%`wc -l test.txt | cut -f 1 -d ' '`))p test.txt
小问题:重复的文件名。
#!/bin/bash
IFS=$'\n' wordsArray=($(<$1))
numWords=${#wordsArray[@]}
sizeOfNumWords=${#numWords}
while [ True ]
do
for ((i=0; i<$sizeOfNumWords; i++))
do
let ranNumArray[$i]=$(( ( $RANDOM % 10 ) + 1 ))-1
ranNumStr="$ranNumStr${ranNumArray[$i]}"
done
if [ $ranNumStr -le $numWords ]
then
break
fi
ranNumStr=""
done
noLeadZeroStr=$((10#$ranNumStr))
echo ${wordsArray[$noLeadZeroStr]}
推荐文章
- 如何合并2 JSON对象从2个文件使用jq?
- 使用该集合的原因。种子功能
- 从枚举中选择一个随机值?
- 我如何在c++中创建一个随机的字母数字字符串?
- 从集合中随机选取一个元素
- Java生成两个给定值之间的随机数
- 如何从枚举中选择一个随机值?
- 删除Bash脚本中的重复条目
- 如何将Bash命令的输出分配给变量?
- PHP中的异步shell执行器
- random.seed():它做什么?
- Git显示“警告:永久添加到已知主机列表”
- Java中生成UUID字符串的有效方法(UUID. randomuuid ().toString()不带破折号)
- 检索Linux上单个进程的CPU使用情况和内存使用情况?
- 如何从远程SSH会话发送数据到本地剪贴板