[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 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 の範囲の符号なしの 10 進整数を 1 行に 1 個含むファイルから入力があったかのように動作する。

shuf の他のオプションは、どの動作モードでも、その動作に影響を与える。

-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 を使用する。 そのランダムデータはどんな並べ替えになるかを決めるのに使用される。 See section ランダムデータのソース.

-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

上記のどの例でも、入力行は 4 行である。 従って、入力は 24 とおりに並べ替えることが可能であり、shuf が生成するのは、そのどれか一つである。 一般的に言うと、入力行が n 行なら、n! とおりに (n の階乗、すなわち、n * (n - 1) * … * 1 とおりに) 並べ替えて、出力することができる。

それぞれが 0 から 9 までの範囲にある数値を 50 回ランダムに出力するには、次のようにする。

 
shuf -r -n 50 -i 0-9

コイン・トス 100 回をシミュレートする。

 
shuf -r -n 100 -e Head Tail

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.