rand() 如何在 awk 中工作

use*_*557 3 shell awk

我正在尝试使用awk和对 csv 文件的第二列进行采样(任何数量的样本都可以)rand()。但是,我注意到我总是得到相同数量的样本

cat toy.txt | awk -F',' 'rand()<0.2 {print $2}' | wc -l
Run Code Online (Sandbox Code Playgroud)

我进行了探索,似乎rand()没有按我预期的那样工作。例如,下面的 a 似乎总是 1,

cat toy.txt | awk -F',' 'a=rand() a<0.2 {print a}' 
Run Code Online (Sandbox Code Playgroud)

为什么?

Joh*_*nck 5

文档

注意:在大多数 awk 实现中,包括 gawk,每次运行 awk 时,rand() 都会从相同的起始数字或种子开始生成数字。因此,程序每次运行时都会生成相同的结果。这些数字在一次 awk 运行中是随机的,但可以从运行到运行进行预测。这对调试很方便,但是如果您希望程序每次使用时都做不同的事情,则必须将种子更改为每次运行时不同的值。为此,请使用 srand()。