Linux 从标准输入进行子采样的命令

Linux command to subsample from stdin

我想随机保留一小部分(比如 0.001)通过 stdin 流入的所有行。是否有 linux 命令可以做到这一点?

我总是可以写一个python脚本来生成一个统一的随机数,并根据它是否 <= 0.001 保留该行。但我想避免编写自己的脚本并在 linux.

中寻找本机命令

够原生吗?

cat input | awk 'rand() <= 0.001' 

编辑:使其每秒 return 组不同的行:

cat input | awk 'BEGIN{srand();} rand() <= 0.001'

大多数 Linux 发行版还包含 BSD games 的发行版(基于 Debian 的发行版上的软件包 bsdgames 和基于 Redhat 的发行版上的软件包 bsd-games)。安装该软件包后,您可以简单地使用 random 过滤器,它完全符合您的要求:

cat input | random 100

平均每 100 行打印一次。