行をランダムシャッフルするワンライナー

そういや昔はメモ代わりにはてなダイアリー使ってたけど最近は長い記事が多いなぁ,とふと思ったので,ちょうど今日使ったTipsがあったのでメモ.

データ処理をしているときにsort|uniqというコンボにはよくお世話になる.その後に行毎にランダムシャッフルしたい場合がある.そのときには以下のようなList::Util::shuffleを使ったワンライナーを使うとシェルだけで事足りる.

% perl -e 'use List::Util qw/shuffle/; @a=<>; @b=shuffle(@a); print @b;' < data.txt

最近はデータ整形の作業が多いのでいろんなノウハウが蓄積中.

2011-09-19追記

ブックマークコメントで参考になるコメントを頂いたので追記します.

Thanks to id:tzccinct さん

ワンライナーのより短い記述のコメントをいただきました.ありがとうございます!

perl -MList::Util=shuffle -e 'print shuffle(<>)' < data.txt
Thanks to id:tor_ozakiさん

Perlワンライナー以外の選択肢のコメントをいただきました.ありがとうございます! (おっしゃるとおりshufで充分な気が...)

  • shufコマンド
  • sortの-Rオプション
    • 実装によっては-Rオプションがない