The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

$0

 -r N : 抽出確率を指定。0.1 や 1e-2 など指定する。0.5 がデフォルトの値。'1/3' のような分数も対応。
 -k N : 1始まりの列番号を指定することで、その数を -r で指定された数に乗じた数が抽出確率になる。
 -:   ; 何番目かのデータであるかを付加して表示される。( -= でヘッダ仮定があれば、2行目を1とする。)
 -q    ; 標準エラー出力に出すことになっている出力行数や乱数シードの情報を出力しない。
 -u num ; -kの指定がある場合に、その列の値が num 以下のみであれば、出力の対象となる。
 -v その行の抽出確率の指定値が、行の末尾に表示される。

 -R   : 復元抽出するように抽出する。ある意味において、二項分布をうまくシュミレートする。
 -V   : 確率的抽出動作はしない。単に各行の末尾に抽出指定値を付加する。
 -x N : 各行の抽出確率を出力する際に、数字を見やすくするために、N倍したものを出力する。
 -= 入力の最初の1行目はそのまま出力し、ランダム抽出の対象とはしない。
 -/ str  : 入力の区切り文字をstr で指定する。未指定ならタブ文字。
 -. str  : 出力の区切り文字をstr で指定する。未指定ならタブ文字。
 
 [用途と使い方]

 標準入力の各行を、指定された確率で、標準出力に書き出す。
 出力において順番の入れ替えはしない。

  $0 -r 1e-2

   # 標準入力の各行を100個に1個出力。

  $0 -r (rate) -k (key)

 # 各行の抽出確率が タブ区切り key 列目(1始まり)の値の数 を
 # rate にかけ算した数になる。

 [注意点]

 各行の抽出確率r の値が0以上1以下の数でない場合の処理について:
  r>1 の場合は、まずint(r)回同じ行を書き出し、そして、r-int(r)の確率で1回出力する。
  r<0 の場合は、何も出力をしない。
 このようにすることで、各行が抽出される回数の期待値が、r>0の場合に r回となる。