从文件或流中获取样本?

从文件或流中获取样本?

是否有任何实用程序可以在命令行上从流中过滤样本,例如

  • 打印文件的每 100 行或
  • 以 0.01 的概率打印出文件的一行或
  • 通过像这样的算法水库取样

更新:到目前为止我发现:

  • 打印文件的每 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需要读取完整的输入才能执行任何操作。

相关内容