Bash脚本读取文本文件中的随机行

离开

我有一个单行bash脚本,可读取文本文件中的随机行:

#!/bin/bash
shuf -n 1 excuses.txt

当我调用脚本时,它给了我一个随机的单行代码,但是我注意到我在脚本中使用的命令实际上并不是那么随机,当我多次运行该脚本时,我可能会看到同一行被读取(即使这是随机的)。我的问题是:是否有另一种方式可以随机打印一行可能比我的代码中随机得多的文本?请注意,我有1,000行可以从此文本文件中读取。

编辑:这是我用来shuf随机化文本文件的结果:

[root@ftpserver bofh] ./bastardScript.sh
Atilla the Hub
[root@ftpserver bofh] ./bastardScript.sh
kernel panic: write-only-memory (/dev/wom0) capacity exceeded.
[root@ftpserver bofh] ./bastardScript.sh
We had to turn off that service to comply with the CDA Bill.
[root@ftpserver bofh] ./bastardScript.sh
YOU HAVE AN I/O ERROR -> Incompetent Operator error
[root@ftpserver bofh] ./bastardScript.sh
Change in Earth's rotational speed
[root@ftpserver bofh] ./bastardScript.sh
Atilla the Hub

如您所见,在我使用脚本的时间内(大约6到10次):

[root@ftpserver bofh] ./bastardScript.sh
Atilla the Hub

过来。我想看看它能否变得比现在更随机。

查尔斯·达菲

如果要确保shuf使用的是高熵源:

shuf -n 1 --random-source=/dev/random <excuses.txt

就是说,听起来您真正想要的是不要两次看到相同的借口(直到它们全部被消耗掉)。在这种情况下,我考虑将文件改组一次,存储一个计数器,然后依次显示每一行。

# In Bash 3 or earlier, you'll need to hardcode a FD number here.
exec {lock_fd}>excuses.count
flock -x "$lock_fd"

[[ -e excuses.shuffled ]] || {
  shuf <excuses.txt >excuses.shuffled || exit
  echo 1 >excuses.count
}
[[ -s excuses.shuffled ]] || exit
counter=$(<excuses.count)
line=$(sed -n "${counter} p" <excuses.shuffled)
if [[ $line ]]; then
  echo "$line"
  echo "$((counter + 1))" >excuses.count
else
  # ran out of lines; delete files and restart this script to reshuffle
  rm -- excuses.shuffled # clear our now-used shuffle
  exec {lock_fd}<&-      # release the lock
  exec "$0" "$@"         # restart the script
fi

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本读取文本文件中的随机行

来自分类Dev

Bash脚本从文本文件读取变量

来自分类Dev

Perl或Bash脚本-文本文件中的前缀行以及文件中较早的文本

来自分类Dev

从文本文件中读取随机块

来自分类Dev

Bash脚本:使用“ AND”条件以不同的行读取文本文件

来自分类Dev

PHP-WordPress脚本从文本文件中获取随机行

来自分类Dev

如何使用批处理脚本跳过注释行以从文本文件中读取

来自分类Dev

从文本文件中读取行,反转并保存在新的文本文件中

来自分类Dev

从文本文件中获取随机行

来自分类Dev

如何显示文本文件中的随机行?

来自分类Dev

如何显示文本文件中的随机行?

来自分类Dev

如何显示文本文件中的随机行?

来自分类Dev

从文本文件中获取随机行

来自分类Dev

从文本文件中的随机行生成 URL?

来自分类Dev

从bash中的文本文件读取多行

来自分类Dev

如何从bash中的文本文件读取坐标?

来自分类Dev

如何从bash中的文本文件读取第n行?

来自分类Dev

Bash脚本仅乘以文本文件中的数字?

来自分类Dev

Bash脚本-如何从文本文件中删除行/单词?

来自分类Dev

Bash脚本-如何从文本文件中删除行/单词?

来自分类Dev

Linux Bash和脚本编制-计算文本文件中的行

来自分类Dev

读取文本文件-bash

来自分类Dev

从Java中的文本文件读取特定行

来自分类Dev

如何同时从文本文件中读取不同的行

来自分类Dev

在文本文件中的行之间读取

来自分类Dev

从C中的文本文件读取前N行

来自分类Dev

从QML Qt / Quick中的文本文件读取行

来自分类Dev

从VB.NET中的文本文件读取行

来自分类Dev

从文本文件中的特定行读取数字

Related 相关文章

热门标签

归档