shuf – 与えた行をシャッフルして返す

coreutil に含まれる、つまり大抵の環境で使えるはずのコマンドだけど、機会が無いとなかなか使わないコマンドがいっぱいあります。

そんななかなか陽が当たらないコマンド類の使い方メモを蓄えていきたいと思います。

shuf

今回は shuf のメモ。shuffle の頭文字と思われますが、その名前の通り与えたデータをシャッフルして返してくれます

$ which shuf
/usr/bin/shuf

$ rpm -qf /usr/bin/shuf
coreutils-8.4-43.el6.x86_64

上記の通り、今回確認している環境は CentOS6 です。

実験ファイルとして利用するテキストファイル KANTO.txt

$ cat KANTO.txt
東京
千葉
埼玉
神奈川
茨城
栃木
群馬

ファイルの行をランダムにシャッフルして取得

基本はこの使い方。標準入力からも受付可能。

$ shuf KANTO.txt
茨城
栃木
東京
群馬
神奈川
千葉
埼玉
$ cat KANTO.txt | shuf
千葉
栃木
東京
茨城
神奈川
埼玉
群馬

ファイルの内容がランダムにシャッフルされて表示されます。
-n オプションで、表示する行数を指定。

$ shuf -n 3 KANTO.txt
茨城
群馬
神奈川
$ cat KANTO.txt | shuf -n 3
茨城
栃木
千葉

与えた引数をシャッフルして出力

-e オプションを使うと、引数がそれぞれ行に見立てられて実行される。
-n オプション併用可能。

$ shuf -e 東京 千葉 埼玉 神奈川 茨城 栃木 群馬
千葉
栃木
茨城
群馬
東京
神奈川
埼玉
$ shuf -e -n 3 東京 千葉 埼玉 神奈川 茨城 栃木 群馬
神奈川
東京
千葉

指定した範囲の数値をシャッフルして出力

-i オプションの後に数値を2つ、ハイフン区切りで指定すると、その範囲の数値がシャッフルして出力される。こちらも -n オプション併用可能。

$ shuf -i 1-5
1
4
3
2
5
$ shuf -i 1-5 -n 3
1
5
3

数値の範囲は0以上の整数で、LOW-HI の順番必須。
負数だったり順番が守られていないと怒られます。

$ shuf -i 0-3
2
1
0
3
$ shuf -i -1-5
shuf: invalid input range `-1-5'
$ shuf -i 5-1
shuf: invalid input range `5-1'