#!/usr/bin/ruby -Ke
# randline <抽出数> [オプション]
# 標準入力からすべての行を読み、乱数で行番号を<抽出数>個だけ選び、その
# 行を出力する。
#   重複の抽出はしない。
#   選んだ順に出力する。

option = Hash.new(FALSE)

if ARGV.size == 2
  if ARGV[1] == '-n'
    option['shownum'] = TRUE
  end
elsif ARGV.size != 1
  puts 'randline <抽出数> [オプション]'
  puts 'オプション： -n ... 通し番号を付ける'
  exit
end

num = ARGV[0].to_i

lines = []

$stdin.each{|line|
  lines << line.chomp
}

history = Hash.new(FALSE)

i = 0
while i < num
  l = rand(lines.size)
  if history[l] 
    redo
  end
  history[l] = TRUE
  if option['shownum']
    printf("%d\t",i+1)
  end
  puts lines[l]
  i += 1
end
