web-dev-qa-db-ja.com

テキスト行のランダム順列

次の内容のファイルがある場合:

0001
0002
0003
0004
0132
0137
0138
0141

Bashでそれらのランダムな順列を取得するにはどうすればよいですか?

6
Tim

shufはあなたが探しているコマンドです。

man shufから

-n、-head-count =最大COUNT行のCOUNT出力

したがって、たとえばファイルから4つのランダムな行を取得するには、次のようにコマンドを使用できます。

shuf -n 4 file

以下のアプローチを使用することもできます。

head -$((${RANDOM} % `wc -l < file` + 1)) file | tail -1

ここで、最後のパイプからテールまでは、出力に必要な行数を指定します。

参照

https://stackoverflow.com/questions/448005/whats-an-easy-way-to-read-random-line-from-a-file-in-unix-command-line

13
Ramesh

これは、coreutilsのsortで次のいずれかを使用して実行できます。

sort -R file
sort --random-sort file
sort --sort=random file

man sortから:

  -R, --random-sort
          sort by random hash of keys

   --sort=Word
          sort according to Word: general-numeric -g, human-numeric -h, month
          -M, numeric -n, random -R, version -V
9
Anthon