2017-08-27 46 views
1

我想品尝CSV文件的第2列(任意数量的样本是罚款)使用awkrand()。但是,我注意到,我总是同一批样品如何兰特()工作在AWK

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

我探索的结束,似乎rand()如我所料不工作。例如,下面的a似乎总是为1,

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

为什么?

+0

只是好奇 - 你认为'a = rand()a <0.2'在你的第二个脚本中意味着什么? –

+0

与键入'rand()<0.2'类似,不是吗?只是想打印rand()的值。 – user3639557

+1

不,这就是'{a = rand()} a <0.2'。我真的不确定awk会写什么,但我最好的猜测是它可能相当于'(a =((rand()a)<0.2?1:0)?1:0)'。 –

回答

4

documentation

小心:在大多数AWK实现,包括GAWK,兰特()开始从相同的起始号码,或种子,每次运行AWK时间生成的数字。因此,程序生成每次运行时相同的结果。这些数字是一个awk的运行中随机的,但可以预测从试验运行。这是便于调试,但如果你想要一个程序每次使用的时间做不同的事情,你必须种子更改为在每次运行不同的值。为此,请使用srand()。