coreutil に含まれる、つまり大抵の環境で使えるはずのコマンドだけど、機会が無いとなかなか使わないコマンドがいっぱいあります。
そんななかなか陽が当たらないコマンド類の使い方メモを蓄えていきたいと思います。
今回は 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'