ファイルやストリームからサンプルを取得しますか?

ファイルやストリームからサンプルを取得しますか?

コマンドラインのストリームからサンプルをフィルタリングするユーティリティはありますか?

  • ファイルの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操作を実行するには入力全体を読み取る必要があるため、ストリームでは機能しません。

関連情報