我想随机保留通过stdin流入的所有行的一小部分(比如0.001)。是否有linux命令可以做到这一点?
我总是可以编写一个python脚本来生成一个统一的随机数,并根据它是否<= 0.001保留该行。但我想避免编写自己的脚本,并在linux中寻找本机命令。
答案 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行打印一次。