テキストファイルをランダムに並べ替えるワンライナー

テキストファイルをランダムに並べ替えたい。すぐ思い浮かぶのは、ランダムな数値を先頭フィールドに追加してソート、そのあと数値フィールドを削除、というもの。ただ、やりがちなのは (そしてたいていの場合、それで済むのだが (そのときに応じて使い捨てるのがワンライナーってもんだ))、フィールド数を仮定したワンライナー
たとえば、フィールド数が 2 のときには、

[takeyuki@sunya pbird]$ cat tmp1.txt | while read x y; do echo -e "$RANDOM\t$x\t$y"; done | sort | cut -f 2- 

のようになる。

フィールド数に依存しない方法を awk で書いてみた。のだが、↑のワンライナーを書いているうちに、awk を使わずに済む方法も見つけてしまった。まあよい。まずは awk 版。

[takeyuki@sunya pbird]$ cat tmp1.txt | awk '{print sprintf("%05d", rand()*100000)$0}' | sort | awk '{print substr($0,6)}'

awk を使わない版。

[takeyuki@sunya pbird]$ cat tmp1.txt | while read x; do echo -e "$RANDOM\t$x"; done | sort -k1,1n | cut -f 2-