生成随机排列
命令语法格式
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 < F和cat 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’结合使用,它们可以相同地处理任意文件名(甚至包含空格或其他特殊字符的文件名)。
使用示例
对于命令:
A man,
a plan,
a canal:
Panama!
EOF
可能会产生如下的输出:
A man,
a canal:
a plan,
同样的,对于下面的命令:
可能会产生下面的输出:
diamonds
spades
hearts
并且命令shuf -i 1-4可能输出:
2
1
3
上面的例子都有四行输出,因此shuf产生的输入可能是24种排列组合中的任何一种。一般来说,如果有n个输入行,则会有n!个可能的输出组合。
要输出0到9范围内的50个随机数,可以使用:
要模拟100个硬币翻转,请使用:
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/shuf
查看info手册:info ‘(coreutils) shuf invocation’
参考文献
- man 1 shuf, version GNU coreutils 8.28
更新日志
- 07/05/2018 创建文章