行をランダムシャッフルするワンライナー
そういや昔はメモ代わりにはてなダイアリー使ってたけど最近は長い記事が多いなぁ,とふと思ったので,ちょうど今日使った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オプションがない