Linux命令从stdin进行子采样

时间:2016-05-18 18:25:20

标签: linux stdin random-sample

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

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

2 个答案:

答案 0 :(得分:4)

它够原生吗?

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

编辑:使其每秒返回不同的行集:

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

答案 1 :(得分:1)

大多数Linux发行版还包括基于Debian的发行版上的BSD games(包bsdgames和基于Redhat的发行版上的bsd-games的发行版。安装该软件包后,您只需使用random过滤器,它就可以完全按照您的要求进行操作:

cat input | random 100

平均每100行打印一次。