ファイルの行をランダムにシャッフルしたい
テキストファイルの各行をランダムな順序で表示したい。
例えば以下のようなファイルがある。
1
2
3
4
5
各行をランダムな順序で並び替えて表示したい。
3
1
5
2
4
shuf
shufコマンドを使用すると、入力の各行をランダムにシャッフルして出力する。
$ shuf numbers.txt
3
1
5
2
4
実行するたびに異なる順序で出力される。
標準入力からシャッフル
パイプでコマンドの出力結果をシャッフルできる。
$ cat numbers.txt | shuf
2
5
1
4
3
指定した行数だけランダムに選択
-nオプションを使用すると、シャッフルした結果から指定した行数だけ出力する。
$ shuf -n 3 numbers.txt
5
2
1
5行のうち3行をランダムに選択して出力している。
ランダムな数値を生成
-iオプションで範囲を指定すると、ランダムな数値を生成できる。
$ shuf -i 1-10
7
2
9
1
5
10
3
8
4
6
-i 1-10で1から10までの数値をランダムな順序で出力している。
-nオプションと組み合わせると、範囲内からランダムに指定した個数の数値を選択できる。
$ shuf -i 1-100 -n 5
42
87
13
65
29
1から100までの範囲から5つの数値をランダムに選択している。
seq と組み合わせる方法
seqコマンドで数値の列を生成してshufでシャッフルする方法もある。
$ seq 1 10 | shuf
8
3
10
5
1
7
2
9
6
4
ただし、shuf -iオプションを使用する方が簡潔で効率的である。
macOS での使用
macOSには標準でshufコマンドが含まれていない。Homebrewでcoreutilsパッケージをインストールするとshufまたはgshufとして使用できるようになる。
$ brew install coreutils
$ gshuf numbers.txt
3
1
5
2
4
$ gshuf -i 1-10 -n 5
7
3
1
9
2
\第一線のプログラマーの行動原理を学べる!/
