是否有任何实用程序可以在命令行上从流中过滤样本,例如
- 打印文件的每 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
需要读取完整的输入才能执行任何操作。