shufコマンドとは、入力行をランダムに並び替えることができるコマンドです。
ランダムなデータは、プログラムの簡単なテストデータを作成するのに役立ちます。
目次
shufコマンドとは
shufコマンドは、入力行をランダムに並び変えて表示します。
並び変えた結果は、入力と同じになる可能性もあります。
また、実行結果は実行するたびに異なります。
shufコマンドの構文
ファイルや標準入力から入力行をランダムに並び替える
1 |
shuf [option...] [file] |
入力文字列を入力行としてランダムに並び替える
1 |
shuf -e aaa bbb ccc |
ランダムに数字を並び替える(数字の範囲を指定)
1 |
shuf -i 1-10 |
shufコマンドの利用例
入力行をランダムに入れ替える
(オプションなし)
オプションがない場合は、ファイルまたは標準入力から行を読み取り、それらの行をランダムに出力します。
コマンド例
1 |
shuf file.txt |
file.txt ▼表示
実行結果
1 2 3 4 5 6 7 8 9 10 |
fff ccc eee jjj bbb ggg ddd aaa iii hhh |
引数から入力を受け取る
(-eオプション)
-eオプションを用いて、shufコマンドの引数に文字列を指定すると、その文字列を入力行として受け取ります。
そして、shufコマンドによって、入力行をランダムに並び替え、出力します。
コマンド例
1 |
shuf -e aaa bbb ccc ddd eee |
実行結果
1 2 3 4 5 |
ddd ccc bbb eee aaa |
整数をランダムに並べる
(-iオプション)
-iオプションは、符号なし整数の範囲を指定することで、ランダムに整数を並べた出力を表示することができます。
ただし、数字の重複はありません。
数字を重複させるには、-rオプションと-nオプションを用います。
コマンド例
1 |
shuf -i 1-10 |
実行結果
1 2 3 4 5 6 7 8 9 10 |
5 1 6 2 3 10 7 8 9 4 |
ランダムに表示する行数を指定
(-nオプション)
-nオプションは、ランダムに表示する行数を指定することができます。
-rオプションがある場合、指定した数字の行数分を表示します
-rオプションがない場合で、入力行以上の数字が指定された場合に、出力は入力行分の行数になります。
コマンド例
1 |
shuf -i 1-10 -n 3 |
実行結果
1 2 3 |
6 2 8 |
ランダムに表示する行に重複を許可
(-rオプション)
-rオプションは、ランダムに表示する行の出力が重複するようになります。
基本的に-nオプションと組み合わせて使用します。
-nオプションがない場合、無限ループになります。
コマンド例
1 |
shuf -i 1-10 -r -n 10 |
実行結果
1 2 3 4 5 6 7 8 9 10 |
3 7 3 2 4 2 10 3 4 3 |
シードを指定
(--random-sourceオプション)
--random-sourceオプションは、ランダムデータのシードにファイルを選択することができます。
ランダムデータに再現性を持たせるために使用します。
コマンド例
1 |
shuf --random-source=file.txt file.txt |
file.txt ▼表示
実行結果
1 2 3 4 5 6 7 8 9 10 |
hhh bbb ddd fff ccc ggg jjj aaa iii eee |
出力ファイルを指定
(-oオプション)
-oオプションは、ファイルを指定することでその出力結果を別のファイルに保存することができます。
また、shufコマンドは入力行をすべて読み取った後で出力を行うため、上書きする状況でもこのオプションは利用できます。
コマンド例
1 |
shuf -o file.txt < file.txt |
file.txt ▼表示
実行結果(file.txt)
1 2 3 4 5 6 7 8 9 10 |
iii eee fff ccc hhh aaa ddd jjj bbb ggg |
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版