为 table 中的特定列生成随机数

Generating random number for specific column in table

如何为所需列中的值生成随机数?

例如: 我有以下数据,我想为第 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[[=13=]]{do{x=int(rand()*100000000);a[[=13=]]=x}while(b[x])}{print [=13=],a[[=13=]]}' 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列中的新值是随机生成的数字时,与之前的值重合,因此如果该值出现不止一次,它将具有相同的随机数是一致的

问题是您没有替换第 3 个字段

awk -F", " -v OFS=", " 'NR > 1 { = int(rand()*100000000)} {print}' file

请注意,awk(无论如何都是 gawk)每次都会生成相同的伪随机数序列。如果您不想这样,请添加 BEGIN {srand()} (ref)


哦,所以你想替换 $3 中键入该值的每个值。好的:

awk -F", " -v OFS=", " '
    NR > 1 { = ( in r ? r[] : r[]=int(rand()*100000000))} 
    {print}
' file
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