如何为所需列中的值生成随机数?
例如: 我有以下数据,我想为第3列生成随机数。
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 47176121, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 47176121, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 37856233, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 37856233, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 4152121, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 41452121, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 41452121, 6, 0, 0.0
我使用了awk '!a[$0]{do{x=int(rand()*100000000);a[$0]=x}while(b[x])}{print $0,a[$0]}' file
但这似乎不起作用。
编辑 预期的输出应该是: -
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 111, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 111, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 567, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 567, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 90009, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 90009, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 90009, 6, 0, 0.0
当第3列中的新值是随机生成的数字时,它与之前的值一致,因此如果该值出现多次,则它将具有相同的随机数一致
答案 0 :(得分:3)
问题在于你只是没有替换第3个字段
BEGIN {srand()}
请注意,awk(无论如何都是gawk)每次都会生成相同的伪随机数序列。如果您不想这样做,请添加awk -F", " -v OFS=", " '
NR > 1 {$3 = ($3 in r ? r[$3] : r[$3]=int(rand()*100000000))}
{print}
' file
(ref)
哦,所以你要替换键入该值的$ 3中的每个值。 OK:
Col1 Col2, Col3, Col4, col5, col 6
2015-04-05 12:00:00Z, Rob-1, 23778751, 6, 3, 0.0
2015-04-05 12:00:00Z, Rob-2, 23778751, 6, 4, 0.0
2015-04-05 12:00:00Z, Rob-3, 29106573, 4, , 0.0
2015-04-05 12:00:00Z, Rob-4, 29106573, 5, , 0.0
2015-04-05 12:00:00Z, Rob-4, 84581385, 6, 0, 0.0
2015-04-05 12:00:00Z, Rob-5, 15220829, 16, , 0.0
2015-04-05 12:00:00Z, Rob-6, 15220829, 6, 0, 0.0
gsutil -m cp -r gs://my-dra-bucket/* gs://my-nearline-bucket/