shufコマンドというのがあるのを最近知った.名前の通り,行をシャッフルして出力するコマンド.
$ shuf 1 2 3 4 5 ^D 3 2 4 5 1
はい.
ファイルの中からランダムな3件を取り出す
shuf hoge.txt | head -n3
便利.というかhead使わないこともできて,普通はこちらでよさそう:
shuf -n3 hoge.txt
POSIX好きですか
ちなみにshufはPOSIX標準に入っていなくて,coreutilsに入っている.coreutilsはだいたいのディストリビューションに入っているので,そんなに困ることはなさそう.
POSIXが好きな人はsort -Rするとよさそう.ただし内容が同じ行は同じ場所になってしまう.これはこれで役立つかもしれない.
sort -R 1 1 2 2 3 4 5 ^D 1 1 # 同じ行になっている 4 2 2 # 同じ行になっている 5 3
引数をシャッフルする
-eオプションをつけると引数をシャッフルして標準出力に吐き出す.
shuf -e a b c d e a e c d b
その他の使いそうなオプション
詳しくはman見てね
-O- 標準出力の代わりにファイルに書き出す
-r- 行の重複を許容する