綾小路龍之介の素人思考

[sort] テキスト行をランダムに並び替え

sortコマンドは辞書配列ソートするばかりが機能ではない。sort -Rでランダム並べ替え。意外にも@ITのフォーラムで質問が出ていて、不思議な解答があったので。

ランダムソートもできる。それがsortコマンド。まずはperlで適当な文字を出力するテスト。これをネタにソートのテストをする。

$ perl -le 'foreach(0..10){print}'
0
1
2
3
4
5
6
7
8
9
10

-R オプションはランダムソート。2回目のランダムソートは1回目のそれと異なる。

$ perl -le 'foreach(0..10){print}' | sort -R
7
2
4
1
8
5
10
0
6
9
3
$ perl -le 'foreach(0..10){print}' | sort -R
1
3
10
5
4
6
8
0
7
2
9

オプション無しは辞書配列ソート。

$ perl -le 'foreach(0..10){print}' | sort
0
1
10
2
3
4
5
6
7
8
9

-n オプションは数字配列ソート。

$ perl -le 'foreach(0..10){print}' | sort -n
0
1
2
3
4
5
6
7
8
9
10

同じミスを繰り返さないように最後にhelpを載せておこう。

$ sort --help
Usage: sort [OPTION]... [FILE]...
Write sorted concatenation of all FILE(s) to standard output.

Mandatory arguments to long options are mandatory for short options too.
Ordering options:

  -b, --ignore-leading-blanks  ignore leading blanks
  -d, --dictionary-order      consider only blanks and alphanumeric characters
  -f, --ignore-case           fold lower case to upper case characters
  -g, --general-numeric-sort  compare according to general numerical value
  -i, --ignore-nonprinting    consider only printable characters
  -M, --month-sort            compare (unknown) < `JAN' < ... < `DEC'
  -n, --numeric-sort          compare according to string numerical value
  -R, --random-sort           sort by random hash of keys
      --random-source=FILE    get random bytes from FILE (default /dev/urandom)
  -r, --reverse               reverse the result of comparisons

Other options:

  -c, --check, --check=diagnose-first  check for sorted input; do not sort
  -C, --check=quiet, --check=silent  like -c, but do not report first bad line
      --compress-program=PROG  compress temporaries with PROG;
                              decompress them with PROG -d
  -k, --key=POS1[,POS2]     start a key at POS1, end it at POS2 (origin 1)
  -m, --merge               merge already sorted files; do not sort
  -o, --output=FILE         write result to FILE instead of standard output
  -s, --stable              stabilize sort by disabling last-resort comparison
  -S, --buffer-size=SIZE    use SIZE for main memory buffer
  -t, --field-separator=SEP  use SEP instead of non-blank to blank transition
  -T, --temporary-directory=DIR  use DIR for temporaries, not $TMPDIR or /tmp;
                              multiple options specify multiple directories
  -u, --unique              with -c, check for strict ordering;
                              without -c, output only the first of an equal run
  -z, --zero-terminated     end lines with 0 byte, not newline
      --help     display this help and exit
      --version  output version information and exit

POS is F[.C][OPTS], where F is the field number and C the character position
in the field; both are origin 1.  If neither -t nor -b is in effect, characters
in a field are counted from the beginning of the preceding whitespace.  OPTS is
one or more single-letter ordering options, which override global ordering
options for that key.  If no key is given, use the entire line as the key.

SIZE may be followed by the following multiplicative suffixes:
% 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.

With no FILE, or when FILE is -, read standard input.

*** WARNING ***
The locale specified by the environment affects sort order.
Set LC_ALL=C to get the traditional sort order that uses
native byte values.

Report bugs to <bug-coreutils@gnu.org>.

リファレンス

  1. sort manpage random - Google 検索
  2. The Linux Blog » sort man page
  3. ランダム 行 並べ替え linux - Google 検索
  4. テキスト行をランダムに並び替え - Linux Square - @IT
  5. UNIXおよびLinuxフォーラム- Linuxのmanページ-並べ替え

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-04-28T20:59:29+09:00
  2. Modified: 2009-04-28T20:59:29+09:00
  3. Generated: 2017-08-21T23:09:18+09:00