「shuf(1)」-

生成随机排列

命令语法格式

shuf [OPTION]… [FILE]
shuf -e [OPTION]… [ARG]…
shuf -i LO-HI [OPTION]…

命令描述

命令shuf产生输入行的随机排列。每个输出排列都是同样可能的。

命令shuf有三种操作模式,这三种决定了shuf从哪里获取输入行。默认情况下,shuf从文件中读取数据,如果未指定文件,或者文件为‘-’,则它会从标准输入读取行。

命令支持的选项及含义

必须提供给长选项的参数也必须提供给对应的短选项。

–help
显示帮助信息并退出。

–version
显示版本信息。

下面的选项用于控制数据读取的位置

-e, –echo
将每一个ARG视为一个输入行。

-i, –input-range=LO-HI
参数LO-HI指定了一个正整数范围,形如1-10。该行为如同指定了一个文件,该文件的内容为由LO到HI的正整数组成,每行一个。

下面的选项用于控制命令行为

-n count, –head-count=count
最多输出count行。默认情况下,输出所有输入行。

-o output-file, –output=output-file
将输出写入output-file而不是标准输出。命令shuf在打开output-file之前会读取所有输入,因此你可以使用shuf -o F < Fcat F | shuf -o F等命令安全地处理原有文件。

–random-source=file
使用文件file作为随机数据的来源,用于确定要生成哪种排列。请参阅「随机来源」。

-r, –repeat
重复输出的值。使用此选项后,输出不是输入的随机排列,而是每个输出行都是从所有的输入中随机选择的,可能会出现相同的行。此选项通常与–head-count结合使用;如果没有给出–head-count选项,命令shuf会无限期地重复。

-z, –zero-terminated
使用零字节(ASCII NUL)而不是换行符(ASCII LF)分隔项目。即,将输入数据视为由ASCII NUL分隔的项目,并使用ASCII NUL作为输出项目的终止字符。

此选项可与’perl -0’或’find -print0’和’xargs -0’结合使用,它们可以相同地处理任意文件名(甚至包含空格或其他特殊字符的文件名)。

使用示例

对于命令:

# shuf <<EOF

A man,

a plan,

a canal:

Panama!

EOF

可能会产生如下的输出:

Panama!

A man,

a canal:

a plan,

同样的,对于下面的命令:

# shuf -e clubs hearts diamonds spades

可能会产生下面的输出:

clubs

diamonds

spades

hearts

并且命令shuf -i 1-4可能输出:

4

2

1

3

上面的例子都有四行输出,因此shuf产生的输入可能是24种排列组合中的任何一种。一般来说,如果有n个输入行,则会有n!个可能的输出组合。

要输出0到9范围内的50个随机数,可以使用:

# shuf -r -n 50 -i 0-9

要模拟100个硬币翻转,请使用:

# shuf -r -n 100 -e Head Tail

相关手册

查看在线手册:http://www.gnu.org/software/coreutils/shuf

查看info手册:info ‘(coreutils) shuf invocation’

参考文献

  • man 1 shuf, version GNU coreutils 8.28

更新日志

  • 07/05/2018 创建文章