コマンドラインのストリームからサンプルをフィルタリングするユーティリティはありますか?
- ファイルの100行ごとに印刷するか、
- 確率0.01でファイルの1行を印刷するか、
- このようなアルゴリズムで貯水池サンプリング?
更新:これまでに見つけたものは次のとおりです。
- ファイルの100行ごとに印刷します。
sed -n '0~100p'
答え1
(GNU)awkを使った簡単な解決策:
100個それぞれ(100で割ることができる数字のある行):
do_something | awk 'NR % 100 == 0'
または疑似ランダムに:
do_something | awk 'rand() < 0.01'
BEGIN{ srand() }
この数字は正確に一致しない可能性があり、各実行ごとに新しいシードを初期化するために追加する必要があるかもしれません。
答え2
()をsort
サポートするGNUがコンピュータにある場合は、次のことができます。-R
--random-sort
$ sort -R myfile | head -n 1000
ファイルからランダムに1000行を取得します。ただし、sort
操作を実行するには入力全体を読み取る必要があるため、ストリームでは機能しません。