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表示成功,非零值表示失败。