用固定种子拖曳文件的行?

Fle*_*seo 10 sorting bash

我想用固定的种子对文件的行进行随机排列,以便我总是得到相同的随机顺序.我使用的命令如下:

sort -R file.txt | head -200 > file.sff
Run Code Online (Sandbox Code Playgroud)

我可以做出什么改变,以便用固定的随机种子进行分类?

Cha*_*ffy 11

GNU实现sort有一个--random-source参数.将此参数与具有已知内容的文件的名称一起传递将产生可靠的输出集.

请参阅GNU coreutils手册中的随机源文档,其中包含以下示例实现和示例:

get_seeded_random()
{
  seed="$1"
  openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
    </dev/zero 2>/dev/null
}

shuf -i1-100 --random-source=<(get_seeded_random 42)
Run Code Online (Sandbox Code Playgroud)

由于GNU sort也是coreutils的一部分,因此相关文档也适用于此:

sort --random-source=<(get_seeded_random 42) -R file.txt | head -200 > file.sff
Run Code Online (Sandbox Code Playgroud)

  • `--random-source` 是一个好的开始,但请注意它需要更大的字节数;否则会抛出“文件结束”错误;请参阅/sf/ask/4218635081/ (2认同)

bar*_*abi 10

Linux 的shuf命令可以使用参数将文件作为固定的随机源--random-source

shuf --random-source=some_file.txt file.txt | head -n200 > file.sff
Run Code Online (Sandbox Code Playgroud)

如果您不想提供完整的文件,您可以随时通过管道传输一个文件:

shuf --random-source=<(yes 42) file.txt | head -n200 > file.sff
Run Code Online (Sandbox Code Playgroud)


Dav*_* W. -6

如果你随机打乱行,那么你就没有进行排序。我以前没见过sortwith--random-source提示。如果它确实存在那就很有趣了。但是,这并不是按固定顺序对行进行排序。

我相信您必须为此编写一个程序,但我认为 Bash 无法完全做到这一点。

事实上,可能是这样。$RANDOM 环境变量选择 0 到 32767 之间的随机数。您可以为其分配种子RANDOM,随机数序列将一遍又一遍地出现。您可以使用发牌算法。将每一行读入 Bash 数组,然后使用发牌算法来选取每一行。

我不打算编写测试程序——尤其是在 Bash 中,但你应该明白这个想法。