Shuf:洗牌文本

来自泡泡学习笔记
跳到导航 跳到搜索

shuf 通过输出其输入行的随机排列来洗牌。每个输出排列的概率相等。

shuf [option]… [file]
shuf -e [option]… [arg]…
shuf -i lo-hi [option]…


操作模式

shuf具有三种操作模式,影响它获取输入行的方式。默认情况下,它从标准输入读取行。

‘-e’

‘–echo’

将每个命令行操作数视为输入行。


‘-i lo-hi’

‘–input-range=lo-hi’

将其视为包含范围为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 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!(即n阶乘,或n * (n - 1) * … * 1)种可能的输出排列。


要输出50个范围为0到9的随机数,请使用:

shuf -r -n 50 -i 0-9


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

shuf -r -n 100 -e Head Tail


退出状态为0表示成功,非零值表示失败。