在shell脚本中从文件中读取随机行有什么简单的方法?
当前回答
这很简单。
cat file.txt | shuf -n 1
当然,这只是比“shuf -n 1 file.txt”本身稍微慢一点。
其他回答
另一个选择:
head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1
sort --random-sort $FILE | head -n 1
(我更喜欢上面的shiff方法——我甚至不知道它的存在,我自己也永远不会找到这个工具)
另一种使用awk的方法
awk NR==$((${RANDOM} % `wc -l < file.name` + 1)) file.name
你可以使用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
小问题:重复的文件名。