ファイルからランダムに行を抽出して表示したい

  • お題 : 「f.txt から、ランダムに 20 行抜き出し、表示する」

bash の場合

l=`wc -l f.txt | awk '{print $1}'`
i=1
while [ $i -le 20 ]
do 
  idx=$((RANDOM%l))
  cat f.txt | head -$idx | tail -1
  i=$((i+1))
done

尚、RANDOM 変数ですが、上限 32767 なので、それ以上の行数がファイルにある場合は注意。以下 Mac での man bash より。

RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated.  The sequence of ran-
       dom numbers may be initialized by assigning a value to RANDOM.  If RANDOM is unset, it loses its special proper-
       ties, even if it is subsequently reset.

python の場合

http://www.python.jp/doc/release/lib/module-random.html より、sample 関数を利用。

import random
f=open("f.txt","r")
l=f.readlines()
s=random.sample(l,20)
print "".join(s)